8

エディター テンプレートの場所は次のとおりです。

エリア/投稿/ビュー/共有/EditorTemplates/Question.cshtml

私も持っています:

/Views/Shared/EditorTemplates/Question.cshtml

どちらもモデルは同じです。

私がやろうとしているのは、エリア内のビュー内で、Postsエリア内のエディター テンプレートを呼び出し、HTML を設定してから、メインの共有エディター テンプレートに戻ることです。

PostsEditorTemplateは次のとおりです。

@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.EditorForModel()

ただし、共有エディター テンプレートの内容ではなく、隠しフィールドをレンダリングするだけです。

エディター テンプレートを削除Postsすると、共有テンプレートが適切にレンダリングされます。

MVC/Razor はこれが再帰的か何かだと考えているのでしょうか? 同じテンプレートを呼び出すようなものですか?

共有されたものに行くように指示する方法はありますか?

基本的に、共有テンプレートで HTML を再利用しようとしていますが、独自の卑劣な HTML を挿入しています。

4

2 に答える 2

10

特定のタイプの実行時に使用できるテンプレートは 1 つだけです。ASP.NET MVC は、最初に領域の共有テンプレート フォルダーを検索し、そこで対応するテンプレートを見つけたので、それを選択して使用します。その後、検索を停止し、メインの共有フォルダーに入れたテンプレートは使用されません。それは設計によるものです。

共有されたものに行くように指示する方法はありますか?

はい、テンプレートの場所を明示的に指定できますが、エリア フォルダー内のテンプレートは使用されません。

@Html.EditorFor(x => x.Question, "~/Views/Shared/EditorTemplates/Question.cshtml")
于 2011-11-17T07:09:15.650 に答える
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()
于 2011-11-17T23:10:18.243 に答える