2013-11-02 32 views
4

我有用于DateTime和Date的编辑器模板。 Date的内容是从DateTime简单复制和粘贴的。这是可怕的复制和粘贴编码。EditorTemplates - 在Date.cshtml和DateTime.cshtml之间共享实现

[DataType(DataType.Date)]装饰的属性有没有好的方法来使用DateTime编辑器模板?如何从Date模板中引导以利用带有一些添加的ViewData信息的DateTime模板?

回答

3

您的编辑器模板中有多少代码?

我通常做的是为所有编辑模板共享一个布局,它包含我的模板的大部分常用HTML,然后(通常)只剩下一行代码用于实际类型特定的HTML 。

例如,下面是一个布局编辑器模板的一个简化版本:

_Layout.cshtml

<p> 
    @Html.LabelFor(m => m): 
</p> 
<p> 
    @RenderSection("value") 
</p> 
<p> 
    @Html.ValidationMessageFor(m => m) 
</p> 

然后这里有一些特定类型的模板:

字符串.cshtml

@model System.String 
@{ 
    Layout = "~/Views/Shared/EditorTemplates/_Layout.cshtml"; 
} 
@section value{ 
    @Html.TextBoxFor(m => m) 
} 

Password.cshtml

@model System.String 
@{ 
    Layout = "~/Views/Shared/EditorTemplates/_Layout.cshtml"; 
} 
@section value{ 
    @Html.PasswordFor(m => m) 
} 
+0

啊,伟大的想法,封装这个东西在布局!事实上,Date和DateTime共享所有内容,出于某种原因,从MVC3到MVC5导致装饰为'DataType.Date'的属性不再使用DateTime模板。有一些代码schenanigans来处理从'@ Html.LabelAndEditorFor()'和我正在应用的标准类的调用中请求的合并类,但这就是它。 – MushinNoShin

+0

优秀的优雅解决方案。 –