使用ajax将字符串发送到ActionResult

时间:2015-06-26 12:56:52

标签: javascript jquery ajax asp.net-mvc actionresult

我正在尝试将一个字符串发送到控制器中的ActionResult。我已经学习了许多教程并阅读了数百个stackoverflow,但无法使其工作。我正在尝试发送一个带有radiobutton值的字符串。

我的ActionResult代码是:

[HttpPost]
    public ActionResult Opslaan(string theStatus)
    {
        if(theStatus!= null)
            Database.UpdateAanvraagStatusByGuid(Session["Guid"].ToString(), theStatus);
        return new RedirectResult(Request.UrlReferrer.OriginalString);
    }

我通过AJAX发送变量的代码:

$("#opslaan").click(function (e) {
    e.preventDefault();

    var theStatus = $('input[name=StatusOptions]:checked').val();

    $.ajax({
        type: "POST",
        url: "/Aanvraag/Opslaan",
        data: theStatus,
        success: function (result) {
            if (result.Success) {
                alert("Uw wijzigingen zijn opgeslagen.");
            } else {
                alert(result.Message);
            }
        }
    });
});

当我点击我的按钮" opslaan"该程序不执行te AJAX。周围的提醒确实有效。

提前致谢:)

2 个答案:

答案 0 :(得分:2)

编辑Fabio的答案如下:

$("#opslaan").click(function (e) {
e.preventDefault();

var theStatus = $('input[name=StatusOptions]:checked').val();

$.ajax({
    type: "POST",
    url: "/Aanvraag/Opslaan?theStatus= " + theStatus ,
    //data: { 'theStatus': theStatus } ,
    success: function (result) {
        if (result.Success) {
          alert("Uw wijzigingen zijn opgeslagen.");
        } else {
          alert(result.Message);
        }
    }
    });
});

请注意url属性末尾的查询字符串。即使字符串是可以为空的类型,如果您没有任何路由配置,例如" / Aanvraag / Opslaan / theStatus",路由系统将找不到匹配项。

这里有几点需要注意:

  • 您的原始解决方案DID显示警告,这表示请求已发送到服务器,并且已收到响应。
  • Fabio的回答没有用,因为你(我猜)没有像"/Aanvraag/Opslaan/theStatus"这样的路线。即使string是可空类型 - 因此路由系统将允许字符串参数没有来自请求的传入值 - 客户端设置的url参数告诉路由系统'嘿请转发给我配置为" / Aanvraag / Opslaan / theStatus"等网址的内容。我确信您没有使用该模式设置任何路由,因此路由系统将无法找到匹配的Controller / Action方法对,从而产生404。
  • 您的原始解决方案没有导致此问题,因为您发送了theStatus参数作为数据,而您的url是" / Aanvraag / Opslaan"。这意味着即使是默认路线也能够发现控制器是“Aanvraag'而控制器是'Osplaan'。从那时起,Model Binding能够将您的theStatus参数绑定到action方法参数。 (如果不是,那么只要给参数赋予null值,就会调用正确的操作方法。)但是,您的响应没有发送任何具有属性{{1}的对象返回,所以你的Success语句转到if分支。

总而言之,您可以将else参数作为数据发送,让模型绑定系统将其绑定到您的操作方法参数,或使用路由为您执行此操作。在后一种情况下,您必须配置正确的路由条目或使用类似我修改版本的查询字符串。

要使theStatus语句起作用,您需要发送一些具有if属性的内容,就像Fabio一样。

答案 1 :(得分:0)

可能会有所帮助:

[HttpPost]
    public ActionResult Opslaan(string id)
    {
        if(id != null)
            Database.UpdateAanvraagStatusByGuid(Session["Guid"].ToString(), id);
        // do your logic to check if success is true or false
        return Json(new { Success = true, Message = "something" });
    }

使用Javascript:

$("#opslaan").click(function (e) {
   e.preventDefault();

    var theStatus = $('input[name=StatusOptions]:checked').val();

$.ajax({
    type: "POST",
    url: "/Aanvraag/Opslaan/ " + theStatus ,
    //data: { 'theStatus': theStatus } ,
    success: function (result) {
        if (result.Success) {
            alert("Uw wijzigingen zijn opgeslagen.");
        } else {
            alert(result.Message);
        }
    }
});
});

修改

只是为了查看它是否有效,请在Action和Javascript中更改参数的名称。