如何在MVC中为模型而不是整个模型创建数据模板?

时间:2013-12-05 20:54:38

标签: c# asp.net-mvc asp.net-mvc-5

我的模型有很多重复的数据结构。但我想以相同的方式显示相关数据组。例如,我在文本框旁边有一个复选框,如果最近编辑过该文本框,则会显示一个箭头。我不想为相同的条件一遍又一遍地编写相同的代码。有没有办法可以调用视图结构并传入3个bool和一个字符串等参数,然后将它们放在正确的html显示模板中。

我,使用MVC5,使用c#

1 个答案:

答案 0 :(得分:0)

当然 - 您应该可以使用显示模板和编辑器模板。首先,确定您可以将其抽象为独立视图模型。根据您的问题,我们可以创建一个具有2个布尔属性和1个字符串属性的独立视图模型。

public class PropertyGroup(){
   public bool Checked {get;set;}
   public string Text {get;set;}
   public bool RecentlyEditied{get;set;}
}

在Shared views文件夹中创建一个名为EditorTemplates的文件夹,并在名为PropertyGroup的文件夹中放置一个视图(无论ViewModel类的名称是什么)。这将是局部视图,看起来像

@model Core.Models.ViewModels.PropertyGroup
<div>
   @Html.CheckBoxFor(x=>x.Checked)
   @Html.TextBoxFor(x=>x.Text)
   @if(Model.RecentlyEdited){
       <img src="arrow.gif" />
   }
</div>

现在,您希望该标记出现的任何地方,您可以通过调用Html.EditorFor()帮助程序并发送该ViewModel类来完成此任务。

@Html.EditorFor(x=>x.PropertyOfTypePropertyGroup)