0

我想创建一个更通用的 ContentFor,而不是使用 DisplayFor 和 EditorFor。在该 Html 扩展中,它将考虑元数据值来确定如何呈现结果控件。我不能确定的唯一难题是:有没有办法确定我当前是在渲染 DisplayTemplate 还是 EditorTemplate。作为一个真实的例子,在渲染字符串时,对于显示版本,我想将其渲染为 ,但在渲染编辑器版本时,我想将其渲染为文本框。

为了更好地解释,假设我有两个名为 Address.ascx 的模板,一个在 DisplayTemplates 目录中,一个在 EditorTemplates 目录中。我希望他们两个都使用 ContentFor 进行渲染,但是在显示版本中它呈现为标签,而在编辑器版本中它呈现为文本框。

4

1 回答 1

0

使用两个 ASCX 文件来调用单个文件控件(这是可行的,只需执行另一个 RenderPartial 或 DisplayFor/LabelFor)对我来说没有意义。它打破了“关注点分离”。Label 显示标签,Display 显示值,控件试图找出您希望它显示的方式是没有意义的。

如果您想为属性使用自定义显示或标签,请使用 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

于 2010-07-29T20:29:46.817 回答