jquery 的ajax 向后台传递对象时,可以用转换为JSON的方式,我试验了多次,终于找到了可行的防范,在这里做个记录,以方便不会用此方法的博友们备查:
试验代码如下:
一、同时传递两个对象到后台:
1,前台代码:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Index.cshtml";
}
<a href="SystemManage/Area">Areas/SystemManage/</a>
@Html.ActionLink("区域","~/SystemManage/Area")
@MvcHtmlString.Create(ViewBag.conn)
<div id="abc"></div>
<form id="form1" method="post">
<input id="id" name="id" value="1" />
<input id="text" name="text" value="2" />
<input id="parentId" name="parentId" value="3" />
</form>
<form id="form2">
<input name="F_Id" value="a" />
<input name="F_ParentId" value="b" />
<input name="F_Layers" value="1" />
<input name="F_EnCode" value="d" />
<input name="F_FullName" value="e" />
<input name="F_SimpleSpelling" value="f" />
<input name="F_SortCode" value="2" />
<input name="F_DeleteMark" value="1" />
<input name="F_EnabledMark" value="0" />
<input name="F_Description" value="f" />
<input name="F_CreatorTime" value="2017-6-12" />
<input name="F_CreatorUserId" value="g" />
<input name="F_LastModifyTime" value="2017-6-13" />
<input name="F_LastModifyUserId" value="h" />
<input name="F_DeleteTime" value="2017-6-14" />
<input name="F_DeleteUserId" value="j" />
</form>
<input type="button" value="test" οnclick="abc()"/>
<script type="text/javascript">
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
}
function abc()
{
var a = $("#form1").serializeObject(); //将表单序列化为JSON对象
var b = $("#form2").serializeObject();
a["data"] = b;
var da = {};
da["treeModel"]=a;
da["area"] = b;
alert(JSON.stringify(da));
$.ajax({
url: "/Home/test",
data: JSON.stringify(da),//JSON.stringify(a),
type: "post",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#abc").append(data);
}
});
}
</script>
2,后台代码:
[HttpPost]
public JsonResult test(testModel treeModel,AreaEntity area)
{
return Json(treeModel.ToJson());
}
3,testModel 实体类代码:
public class testModel
{
public string id { get; set; }
public string text { get; set; }
public string parentId { get; set; }
public AreaEntity data { get; set; }
}
4,AreaEntity实体类代码:
public class AreaEntity
{
public string F_Id { get; set; }
public string F_ParentId { get; set; }
public int? F_Layers { get; set; }
public string F_EnCode { get; set; }
public string F_FullName { get; set; }
public string F_SimpleSpelling { get; set; }
public int? F_SortCode { get; set; }
public bool? F_DeleteMark { get; set; }
public bool? F_EnabledMark { get; set; }
public string F_Description { get; set; }
public DateTime? F_CreatorTime { get; set; }
public string F_CreatorUserId { get; set; }
public DateTime? F_LastModifyTime { get; set; }
public string F_LastModifyUserId { get; set; }
public DateTime? F_DeleteTime { get; set; }
public string F_DeleteUserId { get; set; }
}
二、只传递一个对象到后台(可以把第二个对象做为第一个对象的参数),只需要把上面的第1、第2替换为如下:
1前台代码:
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Index.cshtml";
}
<a href="SystemManage/Area">Areas/SystemManage/</a>
@Html.ActionLink("区域","~/SystemManage/Area")
@MvcHtmlString.Create(ViewBag.conn)
<div id="abc"></div>
<form id="form1" method="post">
<input id="id" name="id" value="1" />
<input id="text" name="text" value="2" />
<input id="parentId" name="parentId" value="3" />
</form>
<form id="form2">
<input name="F_Id" value="a" />
<input name="F_ParentId" value="b" />
<input name="F_Layers" value="1" />
<input name="F_EnCode" value="d" />
<input name="F_FullName" value="e" />
<input name="F_SimpleSpelling" value="f" />
<input name="F_SortCode" value="2" />
<input name="F_DeleteMark" value="1" />
<input name="F_EnabledMark" value="0" />
<input name="F_Description" value="f" />
<input name="F_CreatorTime" value="2017-6-12" />
<input name="F_CreatorUserId" value="g" />
<input name="F_LastModifyTime" value="2017-6-13" />
<input name="F_LastModifyUserId" value="h" />
<input name="F_DeleteTime" value="2017-6-14" />
<input name="F_DeleteUserId" value="j" />
</form>
<input type="button" value="test" οnclick="abc()"/>
<script type="text/javascript">
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[
if (!o[
o[
}
o[
} else {
o[
}
});
return o;
}
function abc()
{
var a = $("#form1").serializeObject(); //将表单序列化为JSON对象
var b = $("#form2").serializeObject();
a["data"] = b;
$.ajax({
url: "/Home/test",
data:JSON.stringify(a),
type: "post",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#abc").append(data);
}
});
}
</script>
public JsonResult test(testModel treeModel)
{
//AreaEntity area = (AreaEntity)treeModel.data;
// treeModel.data = area;
return Json(treeModel.ToJson());
}
在这里对这个功能做个记录