MVC 如何调用控制器 post 方法

NAJ*_*NAJ 5 javascript ajax asp.net-mvc

嗨,我对 Web 开发很陌生,并且被困在特定场景中。

我有一个带有两种方法的 Map 控制器:

public ActionResult Map1(double easting, double northing)
public ActionResult Map2(double easting, double northing)
Run Code Online (Sandbox Code Playgroud)

当被调用时,它们都使用所需的任何模型导航其相应的视图:

return View(model);
Run Code Online (Sandbox Code Playgroud)

然后我有一些 javascript 需要根据传递的动作调用相应的控制器方法。

我想将控制器方法标记为 [HttpPost],但是当我这样做时,然后在 javascript 中使用 ajax 请求,对 View 的调用被吞并并且页面没有被重定向。

目前,我让它工作的唯一方法是:

window.location.href = '/Map/' + actionVal + '?easting=' + easting + '&northing=' + northing;
Run Code Online (Sandbox Code Playgroud)

但是使用这个我不能将方法设置为 POST。

有没有人对我应该如何做到这一点有更好的想法?

ram*_*ilu 3

有人对我应该如何做有更好的想法吗?

实际上,您不需要有TWO不同的控制器操作,而可以只具有ONE. 此操作将返回您想要显示的视图。

进行 POST 的一种方法是使用HTML.BeginForm()控制器和操作名称并将其传递FormMethod.POST给 BeginForm()。在 BeginForm 中,您可以使用 Submit 类型的 HTML 输入按钮来对控制器操作进行 POST 调用。

另外,如果您想区分此控制器操作的调用,我建议您这样 -

首先使用Type变量构建这样的模型,通过变量您可以区分需要对数据执行的操作 -

public class Details
{
    public string easting { get; set; }
    public string northing { get; set; }
    public string type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

让你的控制器动作像这样定义 -

[HttpPost]
public ActionResult Map(Details details)
Run Code Online (Sandbox Code Playgroud)

你可以让你的视图定义HiddenField这样的 -

@model Namespace.Details

@{
    ViewBag.Title = "Title";
}

<div id="uploadCourseList">
    @using (Html.BeginForm("Action", "Controller", FormMethod.Post))
    {
        @* Other properties of Model *@
        @Html.HiddenFor(m => m.type)
        <input type="submit">
    }
</div>
Run Code Online (Sandbox Code Playgroud)

现在在视图上设置type,以便您可以区分后操作并对数据执行必要的计算并返回视图。