我想创建一个更通用的ContentFor,而不是使用DisplayFor和EditorFor。在该Html扩展中,它将考虑元数据值以确定如何呈现结果控件。我不能确定的唯一一个难题是:有没有办法确定我当前是渲染DisplayTemplate还是EditorTemplate。作为一个真实世界的例子,当渲染字符串时,对于显示版本我想将其渲染为a,但在渲染编辑器版本时,我想将其渲染为文本框。
为了更好地解释,假设我有两个名为Address.ascx的模板,一个在DisplayTemplates目录中,另一个在EditorTemplates目录中。我希望他们两个都使用ContentFor进行渲染,但在显示版本中它呈现为标签,在编辑器版本中它呈现为文本框。
答案 0 :(得分:0)
使用两个ASCX文件来调用单个文件控件(这是可行的,只需执行另一个RenderPartial或DisplayFor / LabelFor)对我来说没有意义。它打破了“关注的分离”。标签显示标签和显示显示值,控件尝试找出您希望它显示的方式没有意义。
如果要为属性使用自定义显示或标签,请使用UIHint数据注释。
[UIHint("MyCustomControlName")]
然后在DisplayTemplates和EditorTempaltes中创建一个“MyCustomControlName.ascx”文件,以显示您想要的属性。此外,ascx控件可以读取自定义模型元数据并执行您需要执行的任何操作。 http://weblogs.asp.net/seanmcalinden/archive/2010/06/11/custom-asp-net-mvc-2-modelmetadataprovider-for-using-custom-view-model-attributes.aspx上的示例。