MVC C # - вызвать GET Create вместо POST Create в кнопке

1

В моем 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 в кнопке?

Теги:
asp.net-mvc
ef-code-first

4 ответа

3
Лучший ответ

В шаблоне укажите метод формы:

@using (Html.BeginForm("Create", "Request", FormMethod.Get)) {
    <button type="submit">New Request</button>
}
2

То, что говорили другие, должно действительно работать, однако я бы посоветовал вам подумать о том, что вы действительно пытаетесь сделать. Основываясь на вашем коде, мне кажется, что использование обычной ссылки (которая легко может быть написана как кнопка) будет более ощутимо семантически.

Если это не действительно форма с данными, которые должны быть представлены, на мой взгляд, она не принадлежит к форме.

2

Вы должны заменить кнопку отправки простой 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>
  • 0
    Я мог бы использовать это позже. Но и здесь, как мне вызвать метод GET Create?
  • 0
    Вы можете вызвать метод GET Create, перейдя (не через сообщение) к / Request / Create URL. Кнопка отправки будет POST или GET к действию формы в зависимости от метода формы. Таким образом, единственный способ сделать кнопку отправки для вызова метода GET - это изменить метод формы на GET (см. Ответ ниже)
1

В каждой форме 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>
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню