2011-07-19 5 views
5

オブジェクト。 ...この例では再利用可能なエディタテンプレートは、私はかみそりビューでMVC3を使用していますし、私のクラスのいくつかのための再利用可能なDropDownListsを構築したいと思いますが、はるかに検索した後、私は私がそれを必要とする正確にどのように実行例を発見していない

私はこのような2つのクラスを持っている: -

public class Person 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Group Group { get; set; } 
} 

public class Group 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

Iパーソンのためのワーキングコントローラ/ビューを持っています。ビューがDropDownListForコントロールを持っている:私はこの段階で他の抽象1に説得力のある理由を発見していないよう

@model Person 

... 

@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList)) 

ビューは、仲介モデルではない、直接Personクラスを使用しています。

上記作品罰金...私はそれを見て、人でGroup.IDからの値はビューから返さつかむし、その結果にPerson.Groupを設定するコントローラインチ作品が、理想的ではありません。

バインダーが見つかった:MVC DropDownList values posted to model aren't boundこれは私にとってはうまくいくが、私はそれをまだやっていない。再利用できるのは本当に便利だからだ。

@model Group 

@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList)) 

そして、このようなビューでそれを使用します。 - - を:私がやりたいのは何

は、テンプレートにこのようなものを持っている

@Html.EditorFor(o => o.Group) 

しかし「は前記doesnの上記のEditorForの行は、クラス全体のエディタを挿入します(例:Group.Descriptionのテキストボックスなど)...私のグループがリストされたDropDownListを挿入するのではなく

私は上記を持っていますViews/Shared/EditorTemplatesのGroup.cshtmlファイルにemplateする

クラスがGroup型のプロパティを持つときはいつでも、このDropDownListエディタはデフォルトで(または少なくともいくつかの属性で指定されていると)使用されます)あなたはこれを処理するために、リストのユーザーコントロールのドロップダウンを作成することができます

答えて

6

提供何かアドバイスを事前に

おかげで...。共有フォルダの下に、EditorTemplatesという名前のフォルダを作成し、そこにユーザコントロールを配置します。 MVCは、慣習的には、Shared/EditorTemplates内でエディタテンプレートを探します。エディタテンプレートを探す場所を上書きすることはできますが、ここではこれには触れません。

ユーザーコントロールを作成したら、適切なプロパティを "UIHint"属性で修飾して、そのプロパティに使用するエディタをエンジンに指示する必要があります。

以下は、サンプル実装です。

Shared/EditorTemplatesフォルダでは、ユーザーコントロール(_GroupsDropDown。次のようにUIHint属性を追加する人でグループプロパティを変更し

@model Group 

@Html.DropDownListFor(o => o.ID, (ViewData["groups"] as SelectList)) 

:この場合はCSHTML)は次のようになり

**[UIHint("_GroupsDropDown")]** 
public Group Group { get; set; } 

あなたのコントローラでは、

ViewData["groups"] = new SelectList(<YourGroupList>, "ID", "Name"); 
が必要になります

上記のコードを取得したら、必要に応じてEditorFor構文を使用できます。

これが役に立ちます。

+2

これは良い答えです。 'EditorFor'にテンプレートを探す場所を教えてください(ビューベースで別のテンプレートを使用したい場合など)。これは次のようになります: '@Html.EditorFor(x => x.Filters.SelectedImprintId、"〜/ Views/Books/EditorTemplates "、Model.Filters.ImprintItems)' –

関連する問題