@ Html.DropDownListFor()を使用しようとする問題が発生しています。コントローラでDropDownListFor&Navigation Properties
public class Thing {
...
public virtual Vendor Vendor { get; set; }
}
私はViewBagに投げるために、ベンダーのリストをつかんだ:
は、私はそれにナビゲーションプロパティを持つモデルを持っている
public ActionResult Create() {
ViewBag.Vendors = Vendor.GetVendors(SessionHelper.CurrentUser.Unit_Id);
return View();
}
のHTMLアイテム表示は次のようになります。
@Html.DropDownListFor(model => model.Vendor, new SelectList(ViewBag.Vendors, "Id", "Name"), "---- Select vendor ----")
@Html.ValidationMessageFor(model => model.Vendor)
ドロップダウンリストがレンダリングされていて、すべてがうまくいかないようです私はフォームを提出するまで。 ModelState.IsValidでHttpPost Createメソッドがfalseを返してモデルエラーがスローされました:'System.String'型から '... Models.Vendor'型へのパラメータ変換は、型変換器がこれらの型間で変換できないため失敗しました。私は経由ページのポストを聞かせている場合
、私は、サーバーエラーで終わる: 例外の詳細を:System.ArgumentNullException:値をNullにすることはできません。 パラメータ名:items
@ Html.DropDownListFor()がVendorオブジェクトをナビゲーションプロパティに適切に自動バインドしていないという理由を検索できませんでした。
ご協力いただければ幸いです。
EDIT: "Vendor_Id"に直接アクセスできるようにForeignKey属性を明示的に設定しなければならなかったので、ナビゲーションプロパティではなく "Vendor_Id"を指すようにDropDownListForを変更しました。それはうまくいくようです。
ViewBagをビューデータで渡すようにしてはいけません。あなたはビューモデルを使用します。私はここにコードを投稿することはできません、それは読むことができません。 PM私とあなたに知らせます;) – Ninglin
合意。これはずっと前です。私はMVC 3を中心に考えています。ビューモデルは間違いなく道のりです。 – TheGwa