我有一个应用程序,它使用$ .get在编辑页面和视图页面之间切换页面部分。
(在这个例子中,我传递整个模型,因为它使代码更容易阅读)
$.get(@(Html.Raw(Json.Encode(Url.Action("_Table")))),
@(Html.Raw(Json.Encode(Model))),
function (data) { $('#@(Model.Guid)').empty().append(data)}
);
问题是,当简单的属性(int,string等)被传递回动作时,任何复杂的对象都不能正确传回。
我使用了Request.QueryString.ToString()来查看传递给操作的内容并收到了回复。
{Guid=e1207e1c-78b6-4592-ab49-3ab9fa43a0e3&ExecuteSearch=True&ShowSearch=True&AllowExport=True&SearchData%5bId%5d=0&SearchData%5bName%5d=tes&SearchData%5bHostname%5d=null&SearchData%5bDescription%5d=null&SearchData%5bisActive%5d=false}
我在期待
{Guid=0d7cfe4d-c75f-40fb-ba9a-faee58abfeaa&ExecuteSearch=True&ShowSearch=True&AllowExport=True&SearchData.Id=&SearchData.Name=tes&SearchData.Hostname=&SearchData.Description=}
注意“SearchData.Id”而不是“SearchData%5bId%5d =”
这是模特。
public class VM_List
{
public Guid Guid { get; set; }
public Boolean ExecuteSearch { get; set; }
public Boolean ShowSearch { get; set; }
public Boolean AllowExport { get; set; }
public Boolean MultiEdit { get; set; }
public String Title { get; set; }
public String NewText { get; set; } //If null then link is not shown
public dynamic SearchData { get; set; }
public dynamic Data { get; set; }
public VM_List(Guid Guid, Boolean ExecuteSearch, Boolean ShowSearch, Boolean AllowExport, Boolean MultiEdit, String Title, String NewText, dynamic SearchData, dynamic Data)
{
this.Guid = Guid;
this.ExecuteSearch = ExecuteSearch;
this.ShowSearch = ShowSearch;
this.AllowExport = AllowExport;
this.MultiEdit = MultiEdit;
this.Title = Title;
this.NewText = NewText;
this.SearchData = SearchData;
this.Data = Data;
}
}
任何人对导致编码错误的原因有什么想法?
答案 0 :(得分:3)
如果要发送复杂对象,可以使用JSON请求:
var url = '@Url.Action("_Table")';
var model = @Html.Raw(Json.Encode(Model));
$.ajax({
url: url,
type: 'POST',
data: JSON.stringify(model),
contentType: 'application/json; charset=utf-8',
success: function(result) {
$('#' + model.Guid).empty().append(result);
}
});
JSON.stringify
方法将model
javascript模型变量序列化为要发送到控制器操作的JSON字符串。此方法本身内置于现代浏览器中,但如果您想支持旧版浏览器,则可能需要在页面中包含json2.js
脚本。