0

我需要一些关于 mvc3 中的编辑器模板的帮助。我想知道视图如何知道要调用哪个编辑器模板EditorFor?是否在某处添加了任何类型的参考 ios?例如。- 我有 2 个名为的编辑器模板template1.cshtmltemplate2.cshtml并且我正在编写以下语句 - @Html.EditorFor(model => model.template) (模板是名为的模型列表Template)现在如何EditorFor识别template1要包含的内容或template2?谢谢。

4

1 回答 1

1

现在 EditorFor 将如何识别要包含的模板 1 或模板 2?谢谢。

如果模板属性是,IEnumerable<Template>那么它将包括Template.cshtml.

所以这是一般规则:

如果您在 EditorFor 调用中使用的属性不是集合 ( IEnumerable<T>),则 ASP.NET MVC 将查找与属性类型同名的模板。例如:

public MyViewModel FooBar { get; set; }

会寻找MyViewModel.cshtmlUIHint您可以使用该属性覆盖此行为。因此:

[UIHint("Baz")]
public MyViewModel FooBar { get; set; }

会寻找Baz.cshtml

如果属性是一个集合 ( IEnumerable<T>),那么 ASP.NET MVC 将寻找一个与集合元素的类型同名的编辑器模板。

因此:

public IEnumerable<MyViewModel> Foos { get; set; }

将使用MyViewModel.cshtmlwhich 将自动为集合的每个元素呈现。

另一方面,如果您使用UIHint

[UIHint("Bar")]
public IEnumerable<MyViewModel> Foos { get; set; }

thenBar.cshtml将被渲染,但有一个问题:它不会为集合的每个元素渲染,但它会直接作为模型传递给集合,你必须在里面循环。这是设计使然。

就模板的位置而言,ASP.NET MVC 将首先在名为 EditorTemplates 的子文件夹中查找当前控制器,然后在~/Views/Shared/EditorTemplates. 这允许您覆盖当前控制器的一些全局模板。

或者,您可以在使用 EditorFor 帮助器时指定要呈现的模板的名称:

@Html.EditorFor(x => x.MyProperty, "Bar")

将使用Bar.cshtml. 相同的规则适用于集合与UIHint.

于 2013-07-30T05:48:03.110 回答