ViewModel继承Twitter Bootstrap MVC 4的不同操作

时间:2013-04-10 16:12:49

标签: asp.net-mvc twitter-bootstrap

我试图在MVC中创建一个ViewModel,允许我在显示格式和编辑格式之间切换。

我可以让Controller选择正确版本的ViewModel,并在调试器中显示继承类和基类的所有属性。

当ViewModel传递给视图时,只显示继承类的属性。

这种方法可以工作,还是应该创建两个单独的ViewModel?

视图模型:

public partial class HouseholdViewModel
    {
        public int Id { get; set; }
        public int familyID { get; set; }
        public string entityName { get; set; }
        public System.DateTime attachmentDate { get; set; }
    }

    public partial class DisplayHouseholdViewModel : HouseholdViewModel
    {
        public string phone { get; set; }
    }

    public partial class CreateHouseholdViewModel : HouseholdViewModel
    {
        public string familyPhoneCode { get; set; }
        public string familyPhone { get; set; }
    }

控制器(摘录):

public class HouseholdController : Controller
    {
        private WhatWorksEntities db = new WhatWorksEntities();

        //return viewmodel object
        private string displayView = "displayView";
        private string createView = "createView";

        public IEnumerable<object> GetModel(string view)
        {
            if (view == displayView)
            {
                var householdView = (from h in db.tHouseholds
                                     select new DisplayHouseholdViewModel
                                     {
                                         Id = h.householdID,
                                         familyID = h.familyID,
                                         entityName = h.tEntity.entityName,
                                         attachmentDate = h.attachmentDate,
                                         phone = h.familyPhoneCode + " " + h.familyPhone
                                     }).AsEnumerable();
                return (householdView);
            }
            else
            {
                var householdView = (from h in db.tHouseholds
                                     select new CreateHouseholdViewModel
                                     {
                                         Id = h.householdID,
                                         familyID = h.familyID,
                                         entityName = h.tEntity.entityName,
                                         attachmentDate = h.attachmentDate,
                                         familyPhoneCode = h.familyPhoneCode,
                                         familyPhone = h.familyPhone
                                     }).AsEnumerable();
                return (householdView);
            }
        }

        //
        // GET: /Household/
        public ActionResult Index()
        {

            var householdView = GetModel(displayView).Cast<DisplayHouseholdViewModel>();

            return View(householdView);

        }

返回的视图未显示手机属性:

Index View

---编辑以显示带有电话数据的调试器---

调试视图 Debugger

1 个答案:

答案 0 :(得分:0)

在您的视图中,您需要一些逻辑来显示字段 -

@Html.LabelFor(l => l.Phone, "Phone")
@Html.DisplayFor(p => p.Phone)

在顶部,您需要确保显示正确的视图模型

@model YourNamespace.ViewModels.DisplayViewModel

如果您尝试更改两个ViewModel之间的相同视图,则需要创建两个单独的部分视图并切换其显示设置