Подтвердить что ты не робот

Передайте несколько параметров в Html.BeginForm MVC

У меня есть что-то вроде этого:

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?

4b9b3361

Ответ 1

Здесь есть два варианта.

  • скрытое поле в форме или
  • Добавьте его в параметр значений маршрута в методе начала формы.

Edit

@Html.Hidden("clubid", ViewBag.Club.id)

или

 @using(Html.BeginForm("action", "controller",
                       new { clubid = @Viewbag.Club.id }, FormMethod.Post, null)

Ответ 2

Другой вариант, который мне нравится, который может быть обобщен после того, как я начну видеть код, не соответствующий DRY, заключается в использовании одного контроллера, который перенаправляет на другой контроллер.

public ActionResult ClientIdSearch(int cid)
{
  var action = String.Format("Details/{0}", cid);

  return RedirectToAction(action, "Accounts");
}

Я нахожу, что это позволяет мне применять мою логику в одном месте и повторно использовать ее, но не нужно посыпать JavaScript в представлениях, чтобы справиться с этим. И, как я уже говорил, я могу реорганизовать повторное использование, поскольку я вижу, что это злоупотребляет.