使用AJAX调用MVC5方法

时间:2015-04-27 20:25:21

标签: c# ajax web-services razor asp.net-mvc-5

我被困在这几个星期,非常感谢任何帮助!

我正在构建一个MVC5 Web应用程序(这是我的第一个C#& ASP.NET项目)。此应用程序的模型是Web服务。有一个带有复选框的页面,当单击时,这会调用一些jQuery,它使用AJAX来调用我的一个控制器中的方法。此方法调用Web服务并更新布尔值。这一切似乎都有效...我的问题是我需要通过AJAX调用发送复选框,以便我可以更新与复选框关联的页面上的标签。

有没有更好的方法来实现这一目标? (对我来说似乎相当黑客,使用javascript来调用我的代码)。不过,我的问题是:如何通过AJAX调用传递发件人?

CSHTML页面:

@Html.CheckBox("checkbox_subscribe", new{@id = "subscribeBox"})
@Html.Label("subscribebox", "Please notify me via email of any changes in lead times.")
<script>
    $(document).ready(function () {
        $("#subscribeBox").change(function (event) {
            $.ajax({
                type: "POST",
                url: "@Url.Action("SubscribeClick", "Home")",
                success: function (result) {
                    alert(result);
                }
            });
        });
    });
</script>

控制器方法:

public string SubscribeClick(object sender, EventArgs e)
    {
        String flag;
        if (sender == checked)
        {
            flag = "Y";
        }
        else
        {
            flag = "N";
        }
        websecurity.n_securitySoapClient proxy = new websecurity.n_securitySoapClient();
        String result = proxy.setsubscribeflag("11", flag, "leadtimes");
        if (result.StartsWith("<success>"))
        {
            if (flag == "Y") result = "Successfully subscribed for email.";
            else result = "Successfully unsubscribed from email.";
        }
        return result;
    }

只是旁注:当我尝试将发送方对象转换为CheckBox对象类型时,我收到错误:&#34; InvalidCastException未被使用代码&#34;

处理

1 个答案:

答案 0 :(得分:1)

Ajax是客户端代码,没有c#代码的概念,例如object sender, EventArgs e。更改方法以接受boolean

[HttpPost]
public ActionResult SubscribeClick(bool isChecked)
{
  if(isChecked)
  {
    ....
  }
  else
  {
    ....
  }
  return Json(result, 
}

然后在脚本中,根据复选框的状态传递truefalse

$("#subscribeBox").change(function (event) {
  var isChecked = $(this).is(':checked');
  $.ajax({
    type: "POST",
    url: "@Url.Action("SubscribeClick", "Home")",
    data: { isChecked: isChecked },
    success: function (result) {
      alert(result);
    }
  });
});