我有这样的事情:
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" />
}
这适用于以下Post Action:
[HttpPost]
public ActionResult Create(Competition comp)
{
if (ModelState.IsValid){...}
return RedirectToAction(...);
}
但是,我想从@ViewBag.Club
对象传递一个额外的参数:
[HttpPoSt]
public ActionResult Create(int clubid, Competition comp){...}
如何在BeginForm
?
答案 0 :(得分:73)
这里有两种选择。
修改强>
@Html.Hidden("clubid", ViewBag.Club.id)
或
@using(Html.BeginForm("action", "controller",
new { clubid = @Viewbag.Club.id }, FormMethod.Post, null)
答案 1 :(得分:0)
我喜欢的另一个选项,一旦我开始看到代码不符合DRY,就可以推广,就是使用一个重定向到另一个控制器的控制器。
public ActionResult ClientIdSearch(int cid)
{
var action = String.Format("Details/{0}", cid);
return RedirectToAction(action, "Accounts");
}
我发现这允许我在一个位置应用我的逻辑并重新使用它,而不必在视图中使用JavaScript来处理这个问题。并且,正如我所提到的那样,我可以重构以便重复使用,因为我看到它被滥用了。