如何在局部视图中引用模型的属性?

时间:2013-08-02 11:39:59

标签: asp.net-mvc razor

在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的观点。

1 个答案:

答案 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类型的所有属性都将使用您的模板。