6
私はViewModelのSelectListにバインドするデータのリストを持っています。AutoMapperを使用してASP.NET MVCでリストをSelectListにマップするにはどうすればよいですか?
AutoMapperを使用してどうすればよいですか?
私はViewModelのSelectListにバインドするデータのリストを持っています。AutoMapperを使用してASP.NET MVCでリストをSelectListにマップするにはどうすればよいですか?
AutoMapperを使用してどうすればよいですか?
私たちは、あなたがモデルを持っていると仮定した場合:
public class FooModel
{
public int ModelId { get; set; }
public string Description { get; set; }
}
あなたはその後FooModel
とSelectListItem
との間のマッピングを持つことができます:
Mapper
.CreateMap<FooModel, SelectListItem>()
.ForMember(
dest => dest.Value, opt => opt.MapFrom(src => src.ModelId.ToString())
)
.ForMember(
dest => dest.Text, opt => opt.MapFrom(src => src.Description)
);
、あなたが持っているときに、あなたのIEnumerable<FooModel>
あなたは、単に希望をIEnumerable<SelectListItem>
に変換:
IEnumerable<FooModel> models = ...
IEnumerable<SelectListItem> viewModels = Mapper
.Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(models);
より現実的な例は、以下のビューモデルを持っているだろう:
public class MyViewModel
{
public string SelectedItemId { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
だから今、あなたのコントローラのアクションは、次のようになります。
public ActionResult Index()
{
IEnumerable<FooModel> items = ...
var viewModel = new MyViewModel
{
Items = Mapper.Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(items)
};
return View(viewModel);
}
とあなたの強く型付けされたビューの内部:
@Html.DropDownListFor(
x => x.SelectedItemId,
new SelectList(Model.Items, "Value", "Text")
)
ですので、リスト項目を選択する必要がありますか?ビューでモデルを作成するのではなく、ビューモデルでSelectListをどうやって作成できますか?私のビュー・モデルで常にリストを選択していたので、それを行うことができるのであれば、好奇心をそそられます。 – chobo2
また、 "値"と "テキスト"は常にnullです。なぜ私は分からない。私のコードでは、モデルのリストではなく、自分のドメインオブジェクトのリストにバインドしています。だから多分これらの名前を一致させることはできません(私は "Value"や "Text"と呼ばれるものがないので)、何を使うべきかを伝える方法はありますか? – chobo2
私はあなたの作成マップを使用する必要がありますね。私はそれがオプションの番号1のためだけだと思って、私はオプションの番号2を使用しています。また、 "選択"するのは何ですか?オプション? – chobo2