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

C# ASP.NET MVC 2以两种不同的方式表示同一模型的方式是什么,c#,model-view-controller,asp.net-mvc-2,C#,Model View Controller,Asp.net Mvc 2,例如,我有一个带有属性Title(string)和Valid(bool)的模型X。我需要用不同的字段标签和输入控件在两个单独的页面上显示相同的模型。 例如,“Title”表示标题,“Valid”表示在一张表格上有效,而“Destination”表示标题,“Returning”表示在另一张表格上有效 我想最简单的方法是对同一个模型有两个不同的视图。但这真的是一种MVC方式吗 谢谢它真的是同一型号吗 如果它们是两个具有相似属性的不同实体,那么我将创建两个单独的视图模型。任何公共性都可以放在抽象基类或

例如,我有一个带有属性Title(string)和Valid(bool)的模型X。我需要用不同的字段标签和输入控件在两个单独的页面上显示相同的模型。 例如,“Title”表示标题,“Valid”表示在一张表格上有效,而“Destination”表示标题,“Returning”表示在另一张表格上有效

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


谢谢

它真的是同一型号吗

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

如果是同一个模型,但只是不同的输入屏幕,那么一定要重用该模型


我想第一种情况可能就是与此相关的情况。

好吧,假设您有一个名为List的视图文件夹,还有一个名为Details的视图文件夹,在这两个文件夹中显示模型应该是不同的

您可以在两个文件夹中的每个文件夹中创建DisplayTemplates文件夹,创建与模型同名的PartialControl,还可以将其强式键入模型

在不同的视图中,您可以执行
,也可以使用常规的

编辑 为了尝试和解决最初的问题,也许这可以在某种程度上帮助你(我将此作为另一个问题的答案发布)


也许您可以重写自定义属性以进行某种基于逻辑的名称选择,这样就可以对两种模型变体使用相同的PartialView?

是的,两种不同的视图是合适的,因为您提供了两种不同的模型视图


但是,当数据在每种情况下都代表不同的实体时,您确定您没有将数据塞进一个模型吗?

是的,我就是这样实现的。但让我问这个问题的是,我失去了使用数据注释的可能性以及它给我的魅力。我希望有人能详细说明我的观点中使用了某种中间类。也许这更复杂,但这是一种MVC方式来做这样的事情吗?还有一件关于文件夹的事情。它不像在列表和详细视图中表示相同的模型,更像是在Controller1/Edit/1和Controller2/Edit/2视图中表示相同的模型。从技术上讲,它是代表两个不同业务实体的同一个模型(如我的小例子中的产品和路线)。老实说,我不想对两个完全不同的实体对象使用同一个模型。如果您决定稍后使产品与路线略有不同,会发生什么情况?你必须要么1。对-2或-2进行相同的更改。创建一个新模型,并在使用产品路线的任何地方进行代码更改,反之亦然。正如你所说,你不想失去注释的魅力,我完全同意-所以我真的不认为对两个不同的实体使用相同的模型有任何好处。是的,从技术角度看,它是相同的模型。但同时,从商业角度来看,有两种模式。是的,我知道这听起来像废话,但事实就是这样。请看我对Yngve B.Nilsen答案的评论。是的,你是对的,我对不同的实体使用一个模型,但这是一年左右参与企业解决方案重构的唯一出路。请记住我最后一点对我的答案的评论,因为显然很难摆脱单一模型的方法,让我们看看我们是否能够找到解决方案。问:你有没有办法根据两个模型中的数据来区分它们?基本上是的。为了使我们的示例保持简单,假设模型X还有一个属性数据类型(int),可能值为1或2。
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; }
    }