我很想知道解决以下情况的最佳方法:
public class LittleThingViewModel
{
public string Id{ get; set; }
public string Name { get; set; }
public string Location { get; set; }
}
public class BigThingViewModel
{
public LittleThingViewModel little1 {get; set; }
public LittleThingViewModel little2 {get; set; }
public string propA {get; set; }
public string propB {get; set; }
public string propC {get; set; }
}
在我的控制器的初始CREATE操作中,我填充了两个LittleThingViewModel,将它们分配给新的BigThingViewModel并将其传递给强类型视图。然后,我使用EditorFor为BigThing属性A,B和C渲染编辑控件。
将LittleThingViewModels自动渲染到表单的最佳技术是什么,这样当我回发到我的控制器时它会自动绑定? (我的目标是只显示名称并隐藏其他属性)
public ActionResult Create(BigThingViewModel b)
我发现除了两个LittleThing子视图模型的每个属性之外,我还可以呈现A,B和C属性,并且它在POST期间成功绑定了BigThingViewModel:
Html.DisplayFor(model=>model.little1.Name)
Html.HiddenFor(model=>model.little1.Name)
Html.HiddenFor(model=>model.little1.Id)
Html.HiddenFor(model=>model.little1.Location)
是否有一种技术可以让我自动渲染标签和隐藏元素,而不必每次都明确地执行它们?
类似的东西:
Html.RenderFor(model=>model.little1)
由于
答案 0 :(得分:2)
创建一个强类型为LittleThingViewModel的partial view。
LittleThingView.ascx(局部视图)
Html.DisplayFor(model=>model.Name)
Html.HiddenFor(model=>model.Name)
Html.HiddenFor(model=>model.Id)
Html.HiddenFor(model=>model.Location)
在主视图中
<%
Html.RenderPartial("LittleThingView",model.little1);
Html.RenderPartial("LittleThingView",model.little2);
%>
为了让它看起来更好,你可以在大型ViewModel中为这些对象制作一个集合。因此,如果其中一个为null或您需要多个,则不需要任何更改。
public class BigThingViewModel
{
public List<LittleThingViewModel> littles=new List<LittleThingViewModel>();
public string propA {get; set; }
public string propB {get; set; }
public string propC {get; set; }
}
在视图中:
<%
foreach(var littleThingViewModel in model.littles)
{
Html.RenderPartial("LittleThingView",littleThingViewModel);
}
%>