jquery - MVC4 表单序列化到 Controller 不起作用

标签 jquery ajax asp.net-mvc razor asp.net-mvc-4

我已经尝试了几乎所有方法来使用ajax将表单发送回我的 Controller 。

我已将模型简化为字符串。

  • ajax 正在正确提取所有表单数据。
  • 我也有 serilaizeArray() 。

我的名为 model 的对象每次都是 null(其他参数映射得很好,即页面、排序...)。 我错过了什么?

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:
{\"page\":null,\"itemsperpage\":8,\"sort\":\"Project\",\"sortdir\":\"ASC\",\"model\":\"文件名=123&OriginalFileName=sas&Height=asas&Width=asas&DepartmentId=9b4463cd-c184-e211-9244-005056887208&ClassId=28de9d15-c284-e211-9244-005056887208\"}

Controller :

[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; }
}

最佳答案

问题在于您发送的数据格式不正确。 当您调用 $('#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"
} 

您正在将“model”作为字符串发送。您需要做的是将 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

关于jquery - MVC4 表单序列化到 Controller 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15491139/

相关文章:

jquery - anchor 作为带有 accesskey 的按钮的行为与实际按钮不同

javascript - 关于动态元素中循环的事件

javascript - asp.net +将表行发送到Javascript的代码

javascript - 带有 Ajax 的浏览器 "Busy State"

javascript - Ajax 接收来自服务器的响应并将其保存在变量中以供以后 PhP 使用

ajax - 仅在 Accordion Primefaces 的选项卡上更新

javascript - 无法将 HTML 文本设置到 InnerHtml 属性中

jquery - Lastfm json 响应 'undefined'

c# - 销毁 dataContext 与保持打开以供将来数据库访问的性能考虑?

c# - ASP.net MVC 中枚举的下拉列表中的选定项