哪个是使用具有相同属性和使用唯一视图的多个模型的最佳方法?

时间:2013-04-05 17:09:47

标签: c# asp.net-mvc entity-framework razor

例如,我有3个模型,其中包含Id(int),一个Name(字符串)和一个active(bool)。对于具有相同属性的这些模型,可以只使用一个视图吗?像通用对象这样的技术?继承?这是为了避免使用相同的HTML代码编写多个视图。

3 个答案:

答案 0 :(得分:2)

您可以创建ViewModel

样本:

public class CustomerViewModel
{
   public int Id { get; set; }
   public string Name { get; set; }
   public bool Active { get; set; }
}

使用如下类型创建另一个ViewModel:

public class CustomersViewModel
{
    public CustomerViewModel Customer1 { get; set; }
    public CustomerViewModel Customer2 { get; set; }
    public CustomerViewModel Customer3 { get; set; }
}

并使用以下类型输入您的视图:

@model CustomersViewModel

或者只是使用一个集合来输入您的视图

@model List<CustomerViewModel>

看看这个anwser! https://stackoverflow.com/a/694179/316799

答案 1 :(得分:1)

在视图中,您可以

  • 为所有模型指定共享基类并使用它。
  • 使用dynamic作为模型
  • 在共享中拆分视图(提取到单独的视图中)和特定部分。比使用现有模型(如果使用基类/动态)或仅基于特定模型中的数据构建的新模型调用共享子视图。

使用继承提取共享部分的示例。使用Html.Partial呈现共享部分:

class SharedModel { /* Id,...*/ }
class SpecificModel : SharedModel { /* Special... */ }

SpecificView:

@model SpecificModel 
@Html.Partial("SharedView", Model)
<div>@Model.Special</div>

SharedView:

@model SharedModel 
<div>@Model.Id</div>

附注:如果视图名称与操作名称不匹配,则可以在使用View返回结果时指定视图名称:

return View("MySharedView", model);

答案 2 :(得分:0)

在ASP.NET MVC4中,您有机会不为视图定义模型。这意味着将模型的定义留空(不要使用@model MyNamespace.MyClass)然后它将自动使用“dynamic”作为模型。

问候 基督教