1.需求
允许客户在客户端对数据进行修改,以json字符串的形式传入后端并处理,插入数据库。
2解决方法
2.1前端构建json字符串
<script>
function save_data() {
var type = "Eva_Para_Info";
var val = $('.td1');
var year = $('select').eq(0).find('option:selected').text();
var season = $('select').eq(1).find('option:selected').text();
var j = [];
//var row = {};
for (var i = 0; i < val.length; i = i + 2) {
var row = {};
row.EVA_YEAR = year;
row.EVA_SEASON = season;
row.ROLE = val.eq(i).text();
row.WEIGHT = val.eq(i + 1).text();
j.push(row);
}
$.ajax({
type: 'post',
url: '../new/ajax/ajaxHander.aspx?type=' + type,
data: JSON.stringify(j),
dataType: 'json',
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
processData: false,
cache: false,
success: function (reg) {
alert(reg);
},
error: function () {
alert("发生未知错误!");
}
});
}
</script>
2.2后端接受字符串并处理
private string _response = string.Empty;
private string _type = string.Empty;
private Test_BUL.sys_Common common = new Test_BUL.sys_Common();
Save_Eva_Para_Info(Str)
public void Save_Eva_Para_Info(string Str) {
//Eva_Para_Info data = JsonConvert.DeserializeObject<Eva_Para_Info>(Str);
List<Eva_Para_Info> data = JsonConvert.DeserializeObject<List<Eva_Para_Info>>(Str);
Test_Model.CPCSB MODEL = new Test_Model.CPCSB();
Test_BUL.CPCSB bul = new Test_BUL.CPCSB();
//你可以将下面的内容替换成你的处理代码。。。。。。
foreach(Eva_Para_Info element in data)
{
MODEL.ID = System.Guid.NewGuid().ToString();
MODEL.EVA_YEAR = element.EVA_YEAR;
MODEL.EVA_SEASON = element.EVA_SEASON;
MODEL.TCK_CATE = char.Parse(element.ROLE);
MODEL.WEIGHT = element.WEIGHT;
bul.Add(MODEL);
}
_response = "测评参数已更新!";
Response.Write(_response);
}
2.3后端实体的构建
public class Eva_Para_Info
{
private int _EVA_YEAR;
public int EVA_YEAR
{
get { return _EVA_YEAR; }
set { _EVA_YEAR = value; }
}
private int _EVA_SEASON;
public int EVA_SEASON
{
get { return _EVA_SEASON; }
set { _EVA_SEASON = value; }
}
private string _ROLE;
public string ROLE
{
get { return _ROLE; }
set { _ROLE = value; }
}
private float _WEIGHT;
public float WEIGHT
{
get { return _WEIGHT; }
set { _WEIGHT = value; }
}
}
3.一些实际的问题和解决方案
3.1首先需要注意的是前端我打注释的 //var row = {}
我一开始是这样写的,但是在实际传送过程中,发现所以的实体都变成了最后一个,原因在于我对js的理解不够深入,插入j的只是row,而并没有与row的内容绑定。
3.2其次注意我在后台处理函数中的注释,如果你要处理一组数据,也就是json实体长这样[{},{},{}],就和我一样处理.但是,如果你要处理的其实只是一个json实体,就要用注释的代码将他转化为一个.net实体。
ps:这里没有交代十分清除,所有笔者再补充一点,就是说如果你只打算传递一个json实体,并不打算传递许多组数据,你其实只需要传递一个{},就可以。
4.一些注意事项
关于.net 前后端数据的交互,还有别的方式,因为笔者并没有亲测所以并没有提交,这里用的是Newtonsoft.Json,所以你需要在添加代码引用 using Newtonsoft.Json;
这是一个引用的.dll文件,我用的是4.0版本的类库,但是我的框架其实是4.5版本的,在这里交代一下,以供读者参考。