我是否可以在"区域"编辑器模板中为同一模型调用"共享"编辑器模板?

RPM*_*984 8 mvc-editor-templates razor asp.net-mvc-3

我有一个编辑器模板位置:

地区/职位/查看/共享/ EditorTemplates/Question.cshtml

我也有一个:

/Views/Shared/EditorTemplates/Question.cshtml

对于两者,模型是相同的.

我想要做的是在该Posts区域的视图中,在该区域中调用我的编辑器模板,设置一些HTML,然后冒泡回到主共享编辑器模板.

这是PostsEditorTemplate:

@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)

但它只是渲染了隐藏字段,而不是共享编辑器模板的内容.

如果我删除了Posts编辑器模板,则会正确呈现共享模板.

我猜MVC/Razor认为这是递归的还是什么?就像我调用相同的模板?

有什么方法我可以告诉它去共享的吗?

本质上,我正在尝试在共享模板中重用HTML,但是注入了一些我自己的偷偷摸摸的HTML.

Dar*_*rov 10

对于给定类型,您只能在运行时使用1个模板.ASP.NET MVC首先查看区域共享模板文件夹,因为它在那里找到相应的模板,它会选择它并使用它.然后它停止查看,并且从未使用放在主共享文件夹中的模板.这是设计的.

有什么方法我可以告诉它去共享的吗?

是的,您可以明确指定模板的位置,但不会在区域文件夹中使用该模板:

@Html.EditorFor(x => x.Question, "~/Views/Shared/EditorTemplates/Question.cshtml")
Run Code Online (Sandbox Code Playgroud)

  • 传递特定模板@ Html.EditorFor(x => x.Question,"〜/ Views/Shared/EditorTemplates/Question.cshtml")是否适用于某人?我有ASP MVC 5,它在我的情况下不起作用.它只能识别"〜/ Views/Shared/EditorTemplates/Answer.cshtml"的短名称,例如"Answer",在其他情况下,它会回退到区域编辑器模板. (2认同)

RPM*_*984 2

作为共享的 HTML 标记非常简单(仅呈现一个复选框和一个标签),因此我将标记抽象到自定义 HTML 帮助器中,然后从共享模板和我的区域模板中调用它。

~/Areas/Posts/Views/Shared/EditorTemplates/Question.cshtml:

@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.QuestionCheckBoxForModel()
@Html.QuestionLabelForModel()
Run Code Online (Sandbox Code Playgroud)

~/Views/Shared/EditorTemplates/Question.cshtml:

@model xxx.ViewModels.QuestionViewModel
@Html.QuestionCheckBoxForModel()
@Html.QuestionLabelForModel()
Run Code Online (Sandbox Code Playgroud)