6

MultiSelect ボックスからフォームの値を強く型付けされたビューにバインドする方法を知りたいです。

明らかに、フォームが送信されると、複数選択ボックスは、選択された値の区切り文字列を送信します...この値の文字列をオブジェクトのリストに変換して、モデルに添付して更新する最良の方法は何ですか?

public class MyViewModel {
    public List<Genre> GenreList {get; set;}
    public List<string> Genres { get; set; }
}

コントローラー内でモデルを更新するとき、私は以下のように UpdateModel を使用しています:

Account accountToUpdate = userSession.GetCurrentUser();
UpdateModel(accountToUpdate);

ただし、何らかの方法で文字列から値をオブジェクトに戻す必要があります。

モデルバインダーと関係があると思いますが、これを行う方法の明確な例が見つかりません。

ありがとう!!ポール

4

2 に答える 2

3

モデルバインダーが最適な方法であるというのは正しいことです。これを試して...

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

[ModelBinder(typeof(MyViewModelBinder))]
public class MyViewModel {
    ....
}

public class MyViewModelBinder : DefaultModelBinder {
    protected override void SetProperty(ControllerContext context, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) {
        if (propertyDescriptor.Name == "Genres") {
            var arrVals = ((string[])value)[0].Split(',');
            base.SetProperty(context, bindingContext, propertyDescriptor, new List<string>(arrVals));
        }
        else
            base.SetProperty(context, bindingContext, propertyDescriptor, value);
    }
}
于 2010-12-15T16:33:55.913 に答える
0

この件に関するPhil Haacks のブログ投稿をご覧ください。最近のプロジェクトで、複数選択の強く型付けされたビューの基礎としてそれを使用しました。

于 2010-12-15T16:24:57.937 に答える