2013-02-28 59 views
0

我的模型:如何发布复杂模型以采取行动?定义

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

    public RuleViewModel RuleViewModel { get; set; } 
} 

我的行动定义:在viewmodel.RuleItemList

public JsonResult Save(RulePageViewModel viewmodel) 

我尝试发布JSON,viewmodel.RuleItemList.Count> 0,但实例为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); 
    } 
}); 

谢谢大家!

+2

添加您的视图代码... – Mortalus 2013-02-28 03:38:36

+0

是,添加您的视图代码。这是可能的,但模型联编程序必须能够从请求重建模型。 – 2013-02-28 03:40:18

+0

[模型绑定到列表]上有一篇很好的帖子(http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx) – 2013-02-28 04:54:42

回答

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="" /> 

现在,因为你没有放置任何查看代码或从您的RuleItemRuleViewModel类我的任何代码会发生一些问题来专门回答你的问题,所以请发布更多的信息,但一般来说,你应该从我在这里写的如何实现这样一个将数据发布到你的控制器动作,以便Model Binder知道哪些属性绑定..

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

相关问题