我有一个编辑器模板位置:
区/帖子/查看/共享/ EditorTemplates / Question.cshtml
我也有一个:
/Views/Shared/EditorTemplates/Question.cshtml
对于两者,模型是相同的。
我要做的是在Posts
区域的视图中,在区域中调用我的编辑器模板,设置一些HTML,然后冒泡回到主共享编辑器模板。
这是Posts
EditorTemplate:
@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.EditorForModel()
但它只是渲染了隐藏字段,而不是共享编辑器模板的内容。
如果我摆脱Posts
编辑器模板,则会正确呈现共享模板。
我猜MVC / Razor认为这是递归的还是什么?就像我调用相同的模板一样?
有什么方法可以告诉它去共享的吗?
基本上,我正在尝试在共享模板中重复使用HTML,但是注入了一些我自己的HTML。
答案 0 :(得分:10)
对于给定类型,您只能在运行时使用1个模板。 ASP.NET MVC首先查看区域共享模板文件夹,因为它在那里找到相应的模板,它会选择它并使用它。然后它停止查看,并且从未使用放在主共享文件夹中的模板。这是设计的。
有什么方法可以告诉它去共享的吗?
是的,您可以明确指定模板的位置,但不会在区域文件夹中使用该模板:
@Html.EditorFor(x => x.Question, "~/Views/Shared/EditorTemplates/Question.cshtml")
答案 1 :(得分:2)
由于共享编辑器模板的HTML标记非常简单(只是呈现了一个复选框和标签),我将标记抽象为自定义HTML帮助程序,然后从共享模板中调用它和我的区域模板。
~/Areas/Posts/Views/Shared/EditorTemplates/Question.cshtml
:
@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.QuestionCheckBoxForModel()
@Html.QuestionLabelForModel()
~/Views/Shared/EditorTemplates/Question.cshtml
:
@model xxx.ViewModels.QuestionViewModel
@Html.QuestionCheckBoxForModel()
@Html.QuestionLabelForModel()