MVC如何调用控制器post方法

时间:2014-10-06 09:05:58

标签: javascript ajax asp.net-mvc

嗨,我对网络开发很陌生,并且陷入了特定的情况。

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

public ActionResult Map1(double easting, double northing)
public ActionResult Map2(double easting, double northing)

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

return View(model);

然后我有一些javascript需要调用相应的控制器方法,具体取决于传递的操作。

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

目前我唯一可以使用它的方法是:

window.location.href = '/Map/' + actionVal + '?easting=' + easting + '&northing=' + northing;

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

有没有人更清楚我应该怎么做?

3 个答案:

答案 0 :(得分:3)

  

有没有人更清楚我应该怎么做?

实际上,您不需要TWO个不同的Controller操作,而只能拥有ONE。此操作将返回您要显示的视图。

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

另外如果你想区分这个控制器动作的调用,我会建议你这样的事情 -

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

public class Details
{
    public string easting { get; set; }
    public string northing { get; set; }
    public string type { get; set; }
}

让你的控制器动作定义如下 -

[HttpPost]
public ActionResult Map(Details details)

您可以让自己的观点定义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>

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

答案 1 :(得分:3)

您可以使用此代码:

//Client Side
$.ajax({
    type: "POST",
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    data: {id :1},
    dataType: "json",
    success: function(result) {
    alert(result);
    window.locationre=result.url;
    }
    });
//AjaxTest Controller
[HttpPost]
public ActionResult FirstAjax(string id)
{

 return Json(new {url="URL"});

}

答案 2 :(得分:1)

您正在发送 GET 请求。因为您要在 queryString 上映射参数。

如果要像这样使用它,则应将[HttpGet]属性添加到操作中。但我建议您在 AJAX 请求中使用 HttpPost

编辑:因为你正在使用POST请求应该是这样的

$.ajax({
    type: "POST",
    url: '/Maps',
    contentType: "application/json; charset=utf-8",
    data: {easting: easting, northing: northing}, //Maps the controller params
    dataType: "json",
    success: function() { alert('Success'); }
    });