MVC C# - 在按钮中调用GET Create而不是POST Create

3

在我的RequestController中,我有两个同名的方法Create(),一个用于GET请求,另一个用于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);
    }

4个回答

4
在您的模板中指定表单方法: ```html 在您的模板中,指定表单的方法: ```
@using (Html.BeginForm("Create", "Request", FormMethod.Get)) {
    <button type="submit">New Request</button>
}

4

其他人提到的确实可行,但我鼓励您思考您真正想要做什么。根据您的代码,对我来说使用常规链接(可以轻松地样式化为按钮)在语义上更有意义。

如果它不是真正需要提交数据的表单,在我看来,它就不属于表单。


3
您应该将提交按钮替换为纯HTML链接:

<a class="button" href="@Url.Action("Create", "Request")">New Request</a>

并且在样式中添加“button”类以模拟按钮。或者,如果您想保留按钮:

<button type="submit" onclick="top.location.href='@Url.Action("Create", "Request")'; return false;">New Request</button>

我以后可能会用到这个。 但是在这里,我该如何调用GET Create方法? - MatthiasK
你可以通过导航(而非通过发布)到 /Request/Create 的 URL 来调用 GET Create 方法。提交按钮将根据表单方法 POST 或 GET 到表单操作。因此,使提交按钮调用 GET 方法的唯一方法是将表单方法更改为 GET(参见下面的答案)。 - SmartDev

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>
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接