質問

私は複数選択ボックスから私の強く型付けされたビューに自分のフォームの値をバインドする方法を知っていただきたいと思います。

もちろんフォームを送信すると複数選択ボックスが選択された私の値のdelittemered文字列を提出する...更新する私のモデルにアタッチするために戻ってオブジェクトのリストに、この値の文字列を変換するための最良の方法は何ですか?

public class MyViewModel {
    public List<Genre> GenreList {get; set;}
    public List<string> Genres { get; set; }
}
コントローラ内部の私のモデルを更新するときに

私は以下のようなのUpdateModel使用しています:

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

しかし、私は何とか戻ってオブジェクトに文字列から値を取得する必要があります。

私はそれは、モデルバインダーとは何かを持っているかもしれませんが、私はこれを行う方法のいずれかの良いクリアな例を見つけることができません信じています。

感謝!! ポール

役に立ちましたか?

解決

あなたは、モデルバインダーが進むべき道であることを正しいです。これを試してみてください...

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);
    }
}

他のヒント

フィルHaacksのブログ記事をご覧ください。件名に。私は、マルチのための基礎として、最近のプロジェクトでは強く型付けされたビューを選択することを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top