0

私のモデルは次のように定義されています:

public class RulePageViewModel
{
    public List<RuleItem> RuleItemList { get; set; }

    public RuleViewModel RuleViewModel { get; set; }
}

私の行動は次のように定義されています:

public JsonResult Save(RulePageViewModel viewmodel)

json、viewmodel.RuleItemList.Count > 0 を投稿しようとしましたが、viewmodel.RuleItemList のインスタンスが null です。モデルバインドを使用する場合、ビューでリストをバインドする方法は?

モデルをバインドしようとはしていません。ajax を使用して json をアクションに投稿するだけです。うまくいくと思いますが、失敗したコード:

var s = { "RuleItemList": [{ "RuleGroupId": 1, "RuleGroupName": "", "Keywords": "ajax", "ResponseDescribe": "dadhsa" }], "RuleViewModel": { "RuleGroupId": 14, "RuleList": [{ "RuleId": 567, "SourceId": 125, "KeyValue": "callback", "SourceType": 0 }], "SourceList": [] } };
var ss = JSON.stringify(s);
var json = JSON.parse(ss);
$.ajax({
    url: '@Url.Action("Save")',
    type: 'POST',
    data: json,
    dataType: 'json',
    success: function(response) {
        alert('success');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert(textStatus);
    }
});

OK、私はそれを解決しました:

var json = { "RuleItemList": [{ "RuleGroupId": 1, "RuleGroupName": "", "Keywords": "ajax", "ResponseDescribe": "dadhsa" }], "RuleViewModel": { "RuleGroupId": 14, "RuleList": [{ "RuleId": 567, "SourceId": 125, "KeyValue": "callback", "SourceType": 0 }], "SourceList": [] } };

$.ajax({
    url: '@Url.Action("Save")',
    type: 'POST',
    data: JSON.stringify(json),
    dataType: 'json',
    contentType: 'application/json',
    success: function(response) {
        alert('success');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert(textStatus);
    }
});

皆さんありがとう!

4

1 に答える 1

0

一般に、次のようなことを行う必要があります。

    @for(var i = 0;i<Model.RuleItemList.Count;++i)
    {
        @Html.TextBoxFor(m => m.RuleItemList[i].Name);
    }

    @Html.EditorFor(m = > m.RuleViewModel.PropertyOne);
    @Html.EditorFor(m = > m.RuleViewModel.PropertyTow);
    @Html.EditorFor(m = > m.RuleViewModel.PropertyThree);

最終的にhtmlにそのようなものを生成します:

<input type="text" name="RuleViewModel.PropertyOne" value="" />
<input type="text" name="RuleViewModel.PropertyTow" value="" />
<input type="text" name="RuleViewModel.PropertyThree" value="" />

RuleItemここで、ビューコードまたはクラスからのコードを配置しなかったためRuleViewModel 、質問に具体的に答えるために問題が発生するため、詳細を投稿してください。これにより、データがコントローラー アクションにポストされ、Model Binderバインドするプロパティが認識されます。

http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

于 2013-02-28T03:42:46.660 に答える