我已尝试过将a form发送回我的控制器的所有内容。
我已将模型简化为字符串。
我的模型对象每次都为空(其他参数映射得很好,即页面,排序......)。 我错过了什么?
的Ajax:
...
var model = $('#advancesearchform').serialize();
var request = $.ajax({
type: "POST",
url: "/DAM/Home/_ImageSearchResult",
cache: false,
traditional: true,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify({
page: page,
itemsperpage: itemsperpage,
sort: sort,
sortdir: sortdir,
model: model
}),
success: function (data) {
$('#imagesearchresults').html(data);
}
});
JSON.stringfy:
{\ “页\”:空,\ “itemsperpage \”:8,\ “分类\”:\ “项目\”,\ “sortdir \”:\ “ASC \”,\ “模式\”:\“文件名= 123&安培; OriginalFileName = SAS&安培;身高= ASAS&安培;宽度= ASAS&安培; DepartmentID的= 9b4463cd-c184-e211-9244-005056887208&安培; CLASSID = 28de9d15-c284-e211-9244-005056887208 \“}
控制器:
[HttpPost]
public PartialViewResult _ImageSearchResult(int? page, int itemsperpage, string sort, string sortdir, AdvanceSearchFilters model)
{
}
型号:
public class AdvanceSearchFilters
{
public string FileName { get; set; }
public string OriginalFormat { get; set; }
public string Width { get; set; }
public string Height { get; set; }
public string MediaSource { get; set; }
public string DepartmentId { get; set; }
public string ClassId { get; set; }
public string ThemeId { get; set; }
}
答案 0 :(得分:1)
问题是您以不正确的格式发送数据。 当你打电话给$('#advancesearchform')。serialize();数据被格式化为查询字符串,但您告诉ajax发送JSON。有了这个:
{
"page":null,
"itemsperpage":8,
"sort":"Project",
"sortdir":"ASC",
"model":"FileName=123&OriginalFileName=sas&Height=asas&Width=asas&DepartmentId=9b4463cd- c184-e211-9244-005056887208&ClassId=28de9d15-c284-e211-9244-005056887208"
}
您正在发送"型号"作为一个字符串。您需要做的是将您的advancesearchform属性转换为json格式并将它们附加到当前JSON或将所有内容作为查询字符串发送。
对于第一个,快速解决方案
$.ajax({
type: "POST",
url: "/DAM/Home/_ImageSearchResult",
cache: false,
traditional: true,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify({
page: page,
itemsperpage: itemsperpage,
sort: sort,
sortdir: sortdir,
model: {
FileName: $("#FileName").val(),
OriginalFormat: $("#OriginalFormat").val()
and so on...
对于第二个,您可以执行类似
的操作$.ajax({
type: "POST",
url: "/DAM/Home/_ImageSearchResult",
data: $('#advancesearchform').serialize() + "&page=" + page + "&itemsperpage=" + itemsperpage + "&sort=" + sort + "&sortdir=" +sortdir
答案 1 :(得分:0)
查看代码时,AdvanceSearchFilters
类有一个名为OriginalFormat
的属性,而序列化表单的值为 OriginalFileName
另外我建议从非ajax方法开始。如果您可以在非js环境中正确回发值,那么您就知道问题与ajax有关。
如果元素上的名称值不正确,则模型绑定器无法正确映射它们。例如与AdvanceSearchFilters.Height
Height
答案 2 :(得分:0)
首先,试着看看这里:JSON.Stringify examples
或者,您可以使用$(“form”)。serialize()来序列化您的数据。
$.ajax({
url: "....",
method: "POST",
data: $("form").serialize()
})