什么是ASP.NET MVC 2以两种不同方式表示相同模型的方式

问题描述:

例如,我有一个带属性Title(string)和Valid(bool)的模型X.我需要在具有不同字段标签和输入控件的两个单独页面上显示相同的模型。 例如“标题”为标题,“有效”为有效的一种形式,而“目的地”为标题,“返回”为有效。什么是ASP.NET MVC 2以两种不同方式表示相同模型的方式

我想最简单的方法是对同一模型有两个不同的视图。但是它真的是一种MVC方式吗?

谢谢

+0

在我的回答中敲击了我的最后一条评论,因为它显然很难脱离单一模型的方法,让我们看看我们是否可以找出解决方案。问题:你有什么方法来区分这两个模型的数据? – 2010-08-12 12:28:40

+0

基本上可以。为了保持我们的示例微不足道,假设模型X具有一个可能值为1或2的更多属性DataType(int)。 – Ramunas 2010-08-12 13:09:18

好吧,假设您有一些名为List的视图文件夹,另一个名为Details--并且在两者中显示模型应该是不同的。

您可以在两个文件夹中的每一个文件夹中创建一个DisplayTemplates文件夹,并使用同名作为您的模型创建一个PartialControl,并将其强制键入到您的模型中。

在你不同的观点,你就可以做<%= Html.DisplayFor(your model) %>,或者您也可以使用常规的<% Html.RenderParital("NameOfPartial", ModelX); %>

编辑 要尽量接近原来的问题,也许这可以帮助你以某种方式(我张贴此作为回答不同的问题How to change [DisplayName“xxx”] in Controller?

public class MyDisplayName : DisplayNameAttribute 
{ 
    public int DbId { get; set; } 

    public MyDisplayName(int DbId) 
    { 
     this.DbId = DbId; 
    } 


    public override string DisplayName 
    { 
     get 
     { 
      // Do some db-lookup to retrieve the name 
      return "Some string from DBLookup"; 
     } 
    } 
} 

    public class TestModel 
    { 
     [MyDisplayName(2)] 
     public string MyTextField { get; set; } 
    } 

也许你可以重写自定义属性做一些基于逻辑的名称选择,而这种方式使用相同的PartialView两个模型的差来项?

+0

是的,这就是我实施这个的方式。但是,让我提出这个问题的是,我使用数据注释的可能性以及它给我的魅力。我希望有人会为我的一个观点阐述使用某种中级课程。也许这是更复杂的,但MVC的方式来做这样的事情? – Ramunas 2010-08-12 11:20:10

+0

还有一件关于文件夹的事情。它不像在“列表”和“详细信息”视图中表示相同的模型,它更像是在Controller1/Edit/1和Controller2/Edit/2视图中表示相同的模型。从技术上讲,它是代表两个不同业务实体的相同模型(如我的简单示例中的产品和路由) – Ramunas 2010-08-12 11:29:02

+0

坦率地说,我会为两个完全不同的实体对象使用相同的模型。如果您决定稍后使产品与路线略有不同,会发生什么情况?您必须1.对两者进行相同的更改 - 或 - 2.创建一个新模型,并在您使用Route for Product的任何位置更改代码,反之亦然。正如你所说,你不想失去注释的魅力,而且我完全同意 - 所以我没有看到使用同一个模型用于两个不同实体的优点。 – 2010-08-12 12:04:27

它真的是一模一样吗?

如果它们是两个具有相似属性的不同实体,那么我会创建两个单独的视图模型。任何通用性都可以放在抽象的基类或接口中。

如果它是相同的模型,但只是一个不同的输入屏幕,然后确定,重用该模型。

我会想象第一个案例可能是这里相关的案例。

+0

是的,它与技术视图是相同的模型。但同时从业务角度来看有两种模式。是的,我知道这听起来像垃圾,但就是这样。 – Ramunas 2010-08-12 11:22:56

是的,两个不同的视图是适当的,因为您提供了两个不同的视图模型。

但是,您确定您不会将数据锁定到单个模型中吗?实际上,它在每种情况下代表不同的实体?

+0

请参阅我对Yngve B. Nilsen的回答的评论。是的,你是对的,我为不同的实体使用了一个模型,但这是一年左右参与重构企业解决方案的唯一途径。 – Ramunas 2010-08-12 11:37:23