4

ajaxを使用してフォームをコントローラーに送り返すために、ほぼすべてを試しました。

モデルを文字列だけに単純化しました。

  • ajax はすべてのフォーム データを正しくプルしています。
  • 私も serilaizeArray() を持っています。

モデルと呼ばれる私のオブジェクトは毎回nullです(他のパラメーターはうまくマップされます、つまりページ、ソート...)。私は何が欠けていますか?

アヤックス:

...
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\ ":\"FileName=123&OriginalFileName=sas&Height=asas&Width=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; }
}
4

3 に答える 3

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

2番目のものについては、次のようなことができます

$.ajax({
  type: "POST",
  url: "/DAM/Home/_ImageSearchResult",
  data: $('#advancesearchform').serialize() + "&page=" + page + "&itemsperpage=" + itemsperpage + "&sort=" + sort + "&sortdir=" +sortdir
于 2014-05-28T21:57:51.570 に答える
0

コードを見ると、AdvanceSearchFiltersクラスには呼び出されたプロパティがありますOriginalFormatが、シリアル化フォームにはOriginalFileNameの値があります

また、非 ajax アプローチから始めることをお勧めします。js 以外の環境で値を正しくポストバックできる場合は、問題が ajax 関連であることがわかります。

要素の名前の値が正しくない場合、モデル バインダーはそれらを正しくマップできません。例AdvanceSearchFilters.HeightとしてHeight

于 2013-03-19T10:37:28.740 に答える