В моем RequestController у меня есть 2 метода с тем же именем, Create(), 1 для GET и 1 для POST. Я хочу вызвать метод GET кнопкой. Он работает как текст:
@Html.ActionLink("Create New", "Create")
Но в кнопке он вызывает метод POST Create:
@using (Html.BeginForm("Create", "Request"))
{
<button type="submit">New Request</button>
}
Методы RequestController:
//
// GET: /Request/Create
public ActionResult Create()
{
ViewBag.ID = new SelectList(db.Expenses, "ID", "Department");
var destinations = from t in db.Typevalues
where t.Typeschema.SchemaCode == "CTY"
select t;
ViewBag.Destinations = destinations;
return View();
}
//
// POST: /Request/Create
[HttpPost]
public ActionResult Create(Request request)
{
if (ModelState.IsValid)
{
db.Requests.Add(request);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID = new SelectList(db.Expenses, "ID", "Department", request.ID);
return View(request);
}
Как вызвать метод GET в кнопке?
В шаблоне укажите метод формы:
@using (Html.BeginForm("Create", "Request", FormMethod.Get)) {
<button type="submit">New Request</button>
}
То, что говорили другие, должно действительно работать, однако я бы посоветовал вам подумать о том, что вы действительно пытаетесь сделать. Основываясь на вашем коде, мне кажется, что использование обычной ссылки (которая легко может быть написана как кнопка) будет более ощутимо семантически.
Если это не действительно форма с данными, которые должны быть представлены, на мой взгляд, она не принадлежит к форме.
Вы должны заменить кнопку отправки простой HTML-ссылкой:
<a class="button" href="@Url.Action("Create", "Request")">New Request</a>
и добавьте класс "кнопка" к вашим стилям, чтобы имитировать кнопку. Или если вы хотите сохранить кнопку:
<button type="submit" onclick="top.location.href='@Url.Action("Create", "Request")'; return false;">New Request</button>
В каждой форме HTML вы должны указать метод формы, иначе он по умолчанию. В вашем случае идет одна форма (POST):
@using (Html.BeginForm("Create", "Request", FormMethod.Post))
{
<button type="submit">New Request</button>
}
А другой (GET):
@using (Html.BeginForm("Create", "Request", FormMethod.Get))
{
<button type="submit">New Request</button>
}
Или то же, что у вас было, по умолчанию GET:
@using (Html.BeginForm("Create", "Request"))
{
<button type="submit">New Request</button>
}