【问题标题】:How to set the sender when using AJAX to call MVC5 method使用AJAX调用MVC5方法时如何设置发送方
【发布时间】:2015-07-06 11:15:51
【问题描述】:

我已经坚持了几个星期,非常感谢任何帮助!

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

有没有更好的方法来做到这一点? (对我来说,使用 javascript 调用我的代码似乎相当 hack-ish)。不过,我的问题是:如何通过 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 对象类型时,我收到错误消息:“InvalidCastException 未被使用代码处理”

【问题讨论】:

  • 代码有助于确定您的问题
  • @Pseudonym 我刚刚添加了所有相关代码
  • 那么你有正确触发事件并且正确发送和接收值吗?如果这两个问题的答案都是肯定的,那么我认为您执行此操作的方式没有问题。您可以深入研究 mvc 并为更复杂的对象做一些模型绑定......但对于一个简单的复选框,这没什么大不了的
  • (object sender, EventArgs e)?这是 MVC 还是网络表单?如果要将数据传递给控制器​​,请使用 ajax 的 data 选项 - 例如data: { isSubscibed: true }, 并创建方法public ActionResult SubscribeClick(bool isSubscibed)
  • @StephenMuecke 我什至没有想过尝试这个,但它现在成功了!如果你能用这些信息写一个答案,我很乐意接受。谢谢楼主!

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


【解决方案1】:

Ajax 是客户端代码,没有object sender, EventArgs e 等c# 代码的概念。更改您的方法以接受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);
    }
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2021-11-14
    相关资源
    最近更新 更多