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

Ram*_*nas 6 c# model-view-controller asp.net-mvc-2

例如,我有一个模型X,其属性为Title(字符串)和Valid(bool).我需要在具有不同字段标签和输入控件的两个单独页面上显示相同的模型.例如,标题的"标题"和在一个表格上有效的"有效",而标题的"目的地"和另一个的"返回"是有效的.

我想最简单的方法是为同一个模型提供两个不同的视图.但它真的是一种MVC方式吗?

谢谢

Yng*_*sen 3

好吧,假设您有一些名为“列表”的视图文件夹,还有一个名为“详细信息”的视图文件夹 - 并且两者中显示的模型应该不同。

\n\n

您可以在这两个文件夹中分别创建一个 DisplayTemplates 文件夹,并创建一个与您的模型同名的PartialControl ,并将其强类型化到您的模型中。

\n\n

在您不同的视图中,您可以这样做<%= Html.DisplayFor( your model) %>,或者您也可以使用常规<% Html.RenderParital("NameOfPartial", ModelX); %>

\n\n

编辑\n要尝试解决原始问题,也许这可以在某种程度上帮助您(我将其发布为另一个问题的答案如何更改 [DisplayName\xe2\x80\x9cxxx\xe2\x80\x9d] in Controller?

\n\n
public class MyDisplayName : DisplayNameAttribute\n{\n    public int DbId { get; set; }\n\n    public MyDisplayName(int DbId)\n    {\n        this.DbId = DbId;\n    }\n\n\n    public override string DisplayName\n    {\n        get\n        {\n            // Do some db-lookup to retrieve the name\n            return "Some string from DBLookup";\n        }\n    }\n}\n\n    public class TestModel\n    {\n        [MyDisplayName(2)]\n        public string MyTextField { get; set; }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n