在MVC4中,使用Razor视图引擎,我们有一组项目,我们希望在局部视图中进行分组,以便我们可以重用代码。目前我们的主要观点有以下几点:
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Description, new { @id = "Common" })
<div class="FormValidationText">
@Html.ValidationMessageFor(model => model.Description)
</div>
</div>
我们希望能够使用这种逻辑但是有各种各样的模型,并非所有模型都想使用模型。描述。
例如,我们想使用模型Foo,并为Foo.Bar
属性创建上面的内容,但我们也希望能够使用Hello模型的Hello.World
属性。这些都是类型字符串,正如您所期望的那样,因为我们想要处理来自textarea的文本输入。
我们需要在局部视图中进行哪些编辑,以说“使用任何给定模型的某些指定属性,并将其理解为该模型的属性,以生成这些项目”。接下来,我们如何使用@{Html.RenderPartial(...)}
方法确保我们已经传递了模型属性?
请原谅我,如果这看起来有点困惑,我还在学习MVC和Razor的观点。
答案 0 :(得分:2)
这些都是类型字符串,正如您所希望的那样 处理textarea的文本输入。
您可以编写一个编辑器模板:~/Views/Shared/EditorTemplates/MyTemplate.cshtml
:
@model string
<div class="editor-label">
@Html.LabelFor(model => model)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model, new { @id = "Common" })
<div class="FormValidationText">
@Html.ValidationMessageFor(model => model)
</div>
</div>
然后你可以使用你的观点:
@model Foo
...
@Html.EditorFor(x => x.Description, "MyTemplate")
或:
@model Hello
...
@Html.EditorFor(x => x.World, "MyTemplate")
如果您为模板~/Views/Shared/EditorTemplates/string.cshtml
命名,则在调用EditorFor帮助程序时甚至不需要指定其名称:
@model Hello
...
@Html.EditorFor(x => x.World)
按照惯例,string
类型的所有属性都将使用您的模板。