1

重複の可能性:
カスタムエディターテンプレートでモデルのフィールド名を取得する方法

たとえば、特殊なタイプのエンティティの編集コントロールを出力する場合、色などを考えてみましょう。

@Html.EditorFor(product => product.Color)

これにドロップダウンリストを出力させたいので、そのようなドロップダウンをレンダリングするカスタムエディターテンプレートを作成しようとしました。これまでの私のテンプレートは次のようになります。

@model MyProject.Models.Color
@using (var db = new MyProject.Models.DbContext())
{
    @Html.DropDownList(???,
        new SelectList(db.Colors, "Id", "Name", Model))
}

ドロップダウン???のHTML属性を指定するパラメーターの代わりに何を入力する必要がありますか?name


(明らかな理由から、それだけではありません。同じタイプの異なるフィールド"Color"に対して同じ編集テンプレートを何度か呼び出すことを検討してください。例:

@Html.EditorFor(product => product.InnerColor)
@Html.EditorFor(product => product.OuterColor)

明らかに、これは異なる名前のドロップダウンを生成する必要があります。)

4

2 に答える 2

4

ドロップダウンリストには、すでに正しいフィールド名がすべて含まれています。nameパラメータに渡したものはすべてフィールド名に連結され、認識されなくなります。

正しい解決策は、空の文字列を渡すことです。

@Html.DropDownList("", new SelectList(...))
于 2012-02-15T13:22:11.150 に答える
0

この質問への回答は、使用することを提案します

ViewData.TemplateInfo.HtmlFieldPrefix

したがって、完全なコードは次のようになります

@model MyProject.Models.Color
@using (var db = new MyProject.Models.DbContext())
{
    @Html.DropDownList(ViewData.TemplateInfo.HtmlFieldPrefix + "_Color",
        new SelectList(db.Colors, "Id", "Name", Model))
}
于 2012-02-15T12:20:00.780 に答える