微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何绑定具有sub-viewmodel属性的ViewModel?

如何解决如何绑定具有sub-viewmodel属性的ViewModel?

| 我很好奇知道解决以下情况的最佳方法
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操作中,我填充了两个LittleThingviewmodels,将它们分配给新的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)
谢谢     

解决方法

创建一个部分视图,该视图强烈地键入到LittleThingViewModel。 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);
}
%>
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。