45

我已经为数字输入创建了一个模板,如果我这样做了

@Html.EditorFor(model => model.SomeValue, "Number")

它工作正常并且使用了模板。

然而这不起作用:

@Html.EditorFor(model => model.SomeValue)

为什么我需要为基本类型指定编辑器模板的名称?

4

2 回答 2

93

编辑器模板按惯例工作。模板的名称必须与类型的名称匹配。因此,例如,如果SomeValue是一种int类型,您可以编写一个~/Views/Shared/EditorTemplates/Int32.cshtml将使用的自定义编辑器模板。在这种情况下,所有整数类型都将在您编写时使用此自定义模板@Html.EditorFor(model => model.SomeValue)

如果您不想覆盖整数类型的所有模板,您可以编写一个特定的命名模板~/Views/Shared/EditorTemplates/Number.cshtml,您可以通过将此模板名称指定为EditorFor助手的第二个参数来仅用于某些属性:@Html.EditorFor(model => model.SomeValue, "Number")或者通过使用属性装饰您的视图模型[UIHint]属性:

[UIHint("Number")]
public int SomeValue { get; set; }

然后简单地使用@Html.EditorFor(model => model.SomeValue)将呈现Number.cshtml自定义模板。

我还建议您阅读 Brad Wilsonblog post关于 ASP.NET MVC 中的默认模板的文章。

于 2013-02-02T22:49:31.730 回答
1

在您的编辑器模板中,您必须具有相同的类型 Example :

model.SomeValue 是 loremIpsumObject 的类型

在您的 EditorTemplate 中,您是:

  @model YourNamespaceWhereIsYourClass.loremIpsumObject
  ...And your code in your editorTemplate....

您可以在此处找到日期时间的示例

它对你有帮助吗?

于 2013-02-02T15:34:54.197 回答