0

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ます。テキストエリアからのテキスト入力を処理したいので、これらはすべて文字列型です。

「これらのアイテムを生成するために、特定のモデルの指定されたプロパティを使用し、それがそのモデルのプロパティであることを理解する」と言うには、部分ビューでどのような編集を行う必要がありますか。その後、どのように@{Html.RenderPartial(...)}メソッドを操作して、models プロパティを確実に渡したのでしょうか?

これが少し混乱しているように見える場合は、ご容赦ください。私はまだ MVC と Razor ビューを学んでいます。

4

1 に答える 1

2

テキストエリアからのテキスト入力を処理したいので、これらはすべて文字列型です。

エディター テンプレートを作成できます: ~/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テンプレートを使用します。

于 2013-08-02T11:43:43.217 に答える