0

是否可以使用 MVC 机制来创建可重复的布局?例如:我们在整个节目中都有 HTML 片段,它们必须具有相同的元素和属性,但可以有单独的内容(内容也可以是一堆 HTML)。

我倾向于 HTML 助手,但这似乎不允许这样的事情:

@Html.Business(Name, Attr2)
{
    <em>Do Not Contact</em>
    <p>Arbitrary text</p>
}
@Html.Business(Name, Attr2)
{
    <table>...</table>
}

这里的关键点是嵌入的 HTML 是任意的,并且没有可用于 Helper 方法的参数。

谢谢, 雅克

4

1 回答 1

0

您正在混淆布局和模板。布局是一个基本框架,用作所有视图的公共容器。模板(您应该寻找的)是一种显示特定(通常是特定)类型数据的方式。

有两种实现模板的基本方法。


第一个是将其定义为默认模板。这是通过一个简单的命名约定来完成的。只需确保您的 .cshtml 文件与您的实体类名称具有相同的名称并将其放在:

/Views/Shared/DisplayTemplates/.cshtml

之后,每当您想使用模板显示实体时,请使用@Html.DisplayFor()帮助程序,相应地提供您的对象。

或者,如果您希望以不同的方式调用模板或不希望在每种情况下都使用模板,您可以使用[UIHint("TemplateName")]实体上的属性或在 DisplayFor() 中传递模板名称来指定模板名称。


第二种方法是使用局部视图。您可以创建您希望如何显示数据和使用的部分视图@Html.RenderPartial("TemplateName", object)


在这两种情况下,都可以使用 VS 界面轻松创建 Template / Partial 视图:

  • 右键单击要在其中创建模板的 DisplayTemplate(或其他位置)文件夹,然后单击Add>View...
  • 输入名称,检查Create a strongly-typed view
  • 选择合适的物件(如果找不到,以后可以手动做,但我建议至少选点东西来简化工作)
  • 选择Details作为脚手架模板
  • 选中该Create as partial view
  • 取消选中Use a layout or master page

确保@model <Entity Name>与您将传递的对象匹配,然后对它的显示方式进行任何修改。

享受!

-编辑-

注意:再次阅读您的帖子后,我意识到这可能不是您所要求的,但还不清楚。您能否更详细地解释您要达到的目标,而不是您要如何做到这一点?

您编写的代码片段实际上没有意义。

于 2012-09-04T14:22:18.850 回答