私は、EF6(モデル初)に基づいたエンティティを持つASP.NET MVCプロジェクトを持っています。だから私のエンティティはすべて私のために自動生成されます。私はエンティティSite
を持っており、先に進む前にユーザにSite
を選択させたいだけです。私はいくつかの方法を試しましたが、それらはすべて機能しますが、非常に乱雑で不必要なように見えます。ASP.NET MVCでオブジェクトのIDをフォームからアクションに渡す方法
私はフォームが(Id
または他の何らかのメカニズムによって優れている)に提出されたときに選択されたサイトを取得し、その後、DropdownList
Site
のSを作成するクリーン方法について興味がありました。
現在、私が持っている:
ユーザーがサイトを選択するよう求めているインデックス:
public ActionResult Index()
{
ViewBag.Sites = new SelectList(db.Sites.ToList(), "Id", "Name");
return View();
}
ビュー:
@using (Html.BeginForm("SetSite", "Home"))
{
@Html.Label("sites", "Site:");
@Html.DropDownList("Sites", null, new { @class = "selectpicker" });
<div style="width:100%;height:25px"></div>
<button class="btn btn-default" style="width:100%">Go</button>
}
、フォームがあるSetSite
アクションを、提出済み
[HttpPost]
public ActionResult SetSite()
{
if (Request.Form["Sites"] != null)
{
Session["Site"] = db.Sites.Find(Request.Form["Sites"]);
return RedirectToAction("Home");
}
else
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
}
この方法にはいくつかの問題があります。まず、私は実際には@model
の機能を剃刀で利用し、それを私のSite
クラスの方に向けたいと思っていましたが、自動生成されているので、私は覗き見して、たくさんのビュープロパティを追加したくありません。 (乞食はチョーザーになれません)
第2に、Request.Form['Sites']
は文字列を返し、それをintに変換するのは地獄です。
私が言及したように、@model
の機能をHtml.DropDownListFor
と使いたいと思います。 DBからSites
のリストを使って作業するときは可能ですか?
これをきれいに行うにはどうすればよいですか?
なぜViewModelを使用しないのですか? –
@ HamidMosallaビジュアルスタジオで作成した自動生成ビューを見ると、モデルファーストクラスを使用して達成しようとしていることを実行できるため、ビューモデルを使用していません。言い換えれば、VSはCRUDのビューを生成するためにただ1つのクラス、 'Site'を使うことができました。では、なぜ同じ方法でサイトを選択するためのビューを生成できないのですか?私ができるならば余分なクラスを作ることを避けたいと思います。また、足場と同じデザインパターンを続けることもできます。 –
この単純なCRUD操作のためにRequest.Formを使用する必要はありません。 @modelを使ってMVC(Model-View-Controller)の構造に従います –