2010-12-16 15 views
0

私は、ユーザーに表示したくないBookCoverタイプの一般的な列挙型を持っています。利用可能な選択肢から1つだけブックカバーを選択できます。ASP.NET MVC2でカスタムコレクションをポストバック

public class BookCover { 
     public bool IsSelected { get; set; } 
     public string CoverPathThumb { get; set; } 
     public string SpinePathThumb { get; set; } 
     public string BackPathThumb { get; set; } 
    } 

マイアクションメソッドは

公共のActionResult SelectCover(IEnumerableを<ブックカバー> カバー)と同様です。

私のテンプレートでは、目的のHTMLを列挙して書き出していますが、問題はポストバックからデータを取得する方法がわかりません。

<入力は>のIDとはどのようにして指定しますか?ポストバックが発生したときIEnumerabmeがポピュレートしない別の理由はありますか?

答えて

2

@Vince:ModelBinderをカスタマイズすることができます。また、ModelBinderでは、HttpContext.Request.Formからデータを取得できます。その後、新しいBookCoverコレクションを構築します。 Finalllyあなたが

public ActionResult SelectCover(IEnumerable<BookCover> covers); 

を呼び出し、としてGlobal.asaxの中でそれを登録覚えている:あなたはherehereでの参照を取得することができます

ModelBinders.Binders[typeof(IEnumerable<BookCover>)] = new YourModelBinderName(); 

それについての議論です。これはあなたを助けて欲しい!

0

あなたはBookCoverタイプのIDを追加して、このIDを使用して、ユーザーが選択したカバーを特定する必要があります。データベースからカバーを取り出す場合は、このIDをクラスで使用してください。

私はあなたがこのような何かを行うことができると思い
0

<% foreach(var item in covers) { %> 
    <%: Html.EditorFor(x => item.IsSelected) %> 
<% } %> 
0

ご入力の名前は形式にする必要があります。例えば

covers[0].IsSelected 
covers[0].CoverPathThumb 
covers[0].SpinePathThumb 
covers[0].BackPathThumb 

<input type="text" name="covers[0].CoverPathThumb" /> 

各表紙のエントリごとに0を増やします。

関連する問題