私はこのようなものを持っています:
public ActionResult Create(int clubid)
{
var club = db.Clubs.Single(c=>c.Id == clubid);
ViewBag.Club = club;
Competition comp = db.Competitions.Create();
return View(comp)
}
そして、私の.cshtmlで:
@Model Models.Competition
...
@Using(Html.BeginForm())
{
...
<input type="submit" value="Save" />
}
これは、次のポストアクションで正常に機能します。
[HttpPost]
public ActionResult Create(Competition comp)
{
if (ModelState.IsValid){...}
return RedirectToAction(...);
}
ただし、@ViewBag.Club
オブジェクトから追加のパラメーターを渡します。
[HttpPoSt]
public ActionResult Create(int clubid, Competition comp){...}
BeginForm
でこれをどのようにコーディングしますか?
ここには2つのオプションがあります。
編集
@Html.Hidden("clubid", ViewBag.Club.id)
または
@using(Html.BeginForm("action", "controller",
new { clubid = @Viewbag.Club.id }, FormMethod.Post, null)
私が気に入っているもう1つのオプションは、コードがDRYに準拠していないことが確認できたら一般化できますが、あるコントローラーを使用して別のコントローラーにリダイレクトすることです。
public ActionResult ClientIdSearch(int cid)
{
var action = String.Format("Details/{0}", cid);
return RedirectToAction(action, "Accounts");
}
これにより、ビューにJavaScriptを散らさずにロジックを1つの場所に適用して再利用できるため、これを処理できます。そして、私が述べたように、私はこれが乱用されているのを見て、再利用のためにリファクタリングすることができます。