2013-03-19 49 views
4

我已經嘗試過幾乎所有發送表單回到我的控制器與Ajax。MVC4窗體序列化到控制器不工作

我把我的模型簡化爲字符串。

  • ajax正在提取所有表單數據。
  • 我也有serilaizeArray()。

我的模型對象每次都是空的(其他參數映射就好,即頁面,排序...)。 我錯過了什麼?

阿賈克斯:

... 
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

看你的代碼AdvanceSearchFilters類有一個叫做OriginalFormat屬性,而連載的形式有OriginalFileName

另外的價值,我會建議與非首發阿賈克斯方法。如果您可以在非js環境中正確回發值,那麼您知道問題與ajax相關。

如果元素上的名稱值不正確,則模型聯編程序無法正確映射它們。例如AdvanceSearchFilters.Height作爲並列於Height

+0

我已經知道了阿賈克斯相關的問題。我可以做一個帖子,它很好。我需要做一個ajax文章,以便我可以在返回時拉取部分視圖。 另一方面,綁定應該跳過不存在的名稱並寫入其他名稱。 – idlehands23 2013-03-19 14:06:09

0

首先,試着看看這裏:JSON.Stringify examples
或者您可以使用$(「形式」)序列化()來獲取序列數據。

$.ajax({ 
url: "....", 
method: "POST", 
data: $("form").serialize() 
}) 
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" 
} 

您正在發送「model」作爲字符串。你需要做的是將你的advancesearchform屬性轉換爲json格式,並將它們附加到當前的JSON或者將所有內容作爲查詢字符串發送。

對於第一個,快速soulution將

$.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... 

爲第二個,你可以不喜歡

​​