C# ViewModel内部的ViewModel-如何将其发布?
我在另一个viewmodel中有一个viewmodel,用于分离关注点。我为它创建了一个编辑器模板,并在运行时在控制器中设置了默认值。不幸的是,当父视图模型发布到控制器时,它不会保存子视图模型项的值。代码如下: 注意:一些代码名已更改,因此如果有任何不一致之处,请在注释中指出。我把它翻了4遍,找到了我认为所有的C# ViewModel内部的ViewModel-如何将其发布?,c#,asp.net-mvc,asp.net-mvc-viewmodel,editorfor,C#,Asp.net Mvc,Asp.net Mvc Viewmodel,Editorfor,我在另一个viewmodel中有一个viewmodel,用于分离关注点。我为它创建了一个编辑器模板,并在运行时在控制器中设置了默认值。不幸的是,当父视图模型发布到控制器时,它不会保存子视图模型项的值。代码如下: 注意:一些代码名已更改,因此如果有任何不一致之处,请在注释中指出。我把它翻了4遍,找到了我认为所有的 public class ParentViewModel { public ChildViewModel {get;set;} } public class ChildViewM
public class ParentViewModel {
public ChildViewModel {get;set;}
}
public class ChildViewModel {
public List<Item> Items {get;set;}
}
public class Item {
public int Id {get;set;
public string Name {get;set;}
}
我已经创建了一个EditorTemplate,可以在视图上正确绑定
@model MyProject.ViewModels.ChildViewModel
@foreach (var item in Model.Items)
{
<div class="Item" @String.Format("id=Item{0}", @item.Id) >
Item #@Html.DisplayFor(models => item.Id):
@Html.LabelFor(model => item.Name)
@Html.EditorFor(model => item.Name)
</div>
}
但是,当我提交ParentViewModel绑定到的表单时,ChildViewModel的项为空
控制器
public class ControllerController{
public ActionResult Form {
return View(new ParentViewModel {
ChildViewModel = new ChildViewModel {
Items = new List<Item>(Enumerable.Range(1,20).Select(i => new Item { Id=i })
}
});
}
[HttpPost]
[ActionName("Form")]
public class ActionResult FormSubmitted(ParentViewModel parentViewModel) {
//parentViewModel.ChildViewModel.Items is null!
_fieldThatIsRepresentingMyDataService.Save(parentViewModel);
}
}
ViewView.cshtml
<div class="editor-label">
@Html.LabelFor(model => model.ChildViewModel)
</div>
<div id="ItemList" class="editor-field">
@Html.EditorFor(model => model.ChildViewModel)
</div>
非常感谢您的帮助。问题不在于嵌套视图模型,而在于模型绑定处理表单和数组的方式 您需要确保表单项的呈现方式如下:
<input type="text" name="people[0].FirstName" value="George" />
<input type="text" name="people[0].LastName" value="Washington" />
<input type="text" name="people[1].FirstName" value="Abraham" />
<input type="text" name="people[1].LastName" value="Lincoln" />
<input type="text" name="people[3].FirstName" value="Thomas" />
<input type="text" name="people[3].LastName" value="Jefferson" />
请查看菲尔·哈克(Phil Haack)提供的详细信息。您可以试试这个:ParentViewModel ParentViewModel,列出孩子。这在一个类似的问题中对我有效子视图模型不是空的,但是它的items属性仍然是空的。你是我在地球上最喜欢的人。哈哈!很高兴能帮上忙!我也是…:-
@for (int i = 0; i < Model.Items.Length; i++) {
...
@Html.EditorFor(m => Model.Items[i].Name)
...
}