【问题标题】:AJAX not calling the required C# controller methodAJAX 未调用所需的 C# 控制器方法
【发布时间】:2016-08-17 20:27:04
【问题描述】:

所以我已经坚持了一段时间并且对使用 AJAX 相当陌生,当我在应该调用它的 C# 方法上设置断点时,我遇到的问题是下面的 AJAX从未到达,也没有显示错误。

函数 getCheckBoxes 在我逐步了解 FireBug 发生的情况时被调用和执行。

第二部分是我试图用 AJAX 执行的 C# 方法,我去掉了里面的代码,因为它甚至没有到达它,所以这不是问题。它包含在TestScriptResultsController 中。我已经尝试过 POSTGET 类型。任何帮助将不胜感激。

getCheckBoxes = function getCheckBoxes () {
    //var firstDate = '@Model.FirstDate';
    //var lastDate = '@Model.LastDate';
    var fDateChanged = $("#FirstDate").datepicker('getDate');
    var lDateChanged = $("#LastDate").datepicker('getDate');
    var platformConfig = '@Model.PlatformConfigSelected';
    var triggered = '@Model.TriggeredSelected';

    $.ajax({
        url: '@Url.Action("BranchCheckBoxes", "TestScriptResults")',
        type: 'POST',
        data: { fDateChanged: firstDate, lDateChanged: lastDate, platformConfig: platformConfig, triggered: triggered },
        success: function (data) { $('#checkBoxes').html(data); }
    });
}

控制器动作:

    public ActionResult BranchCheckBoxes(DateTime firstDate, DateTime lastDate, string platformConfig, string triggered)
    {

        return PartialView(trs);
    }

【问题讨论】:

  • 你是否配置了带有这些参数的路由?
  • AJAX 调用的 HTTP 响应是什么?
  • 你可以在 $.ajax 中添加错误方法吗?
  • stackoverflow.com/questions/38937185/… ,还要再检查一下变量名是如何命名的,有时它们有问题,但你没有看到。
  • [HTTP/1.1 500 Internal Server Error 211ms] 我相信你想要的就是 Jason。刚刚在 FireBug 中发现了这个,因为我是新手,现在也在调查这个错误。

标签: javascript c# ajax


【解决方案1】:
  1. 您的 JavaScript 对象初始值设定项语法对于 data 是向后的。尝试使用: data: { firstDate: fDateChanged, lastDate: lDateChanged, platformConfig: platformConfig, triggered: triggered } 正确的语法是{ 'key': 'value' }

  2. '@Url.Action("BranchCheckBoxes", "TestScriptResults")' 将不起作用,除非您位于 Razor 页面中。确保您的 JavaScript 在 .cshtml 或 .vbhtml 页面中,或者(最好)使用url: '/TestScriptResults/BranchCheckBoxes/'

  3. BranchCheckBoxes() 需要有一个[HttpPost] 属性,因为 MVC 对控制器操作默认为 GET:

    [HttpPost]
    public ActionResult BranchCheckBoxes (...)
    

【讨论】:

  • 我尝试了所有这三个建议的相同结果,它从未达到我的 ActionResult 方法。对于第二点,它包含在 .cshtml 中,因此我没有在此处切换格式,但我可以通过 FireBug 看到它将其切换为您建议的 url:'/TestScriptResults/BranchCheckBoxes/'。感谢所有关注其他 cmets 的回复。
【解决方案2】:

感谢 Jason 将我指向 HTTP 响应,因为 .datepick('getDate') 返回一个对象而不是字符串,因此在它可以进入我设置的 ActionResult 方法之前中断。我改变了从日期选择器中检索值的方式,我在 AJAX 调用中的数据行,我改变了我的 actionResult 参数,它现在正在工作。有什么方法可以让 Jason 对此有所了解吗?我是 StackOverflow 的新手,他的评论对找到答案很有帮助?

日期选择器的 JavaScript:

            $(function () {
            $("#FirstDate").datepicker()
              .on("input change", function (e) {
                  var firstDateChanged = $(this).val();
                  firstDateChange();

              });

        });

AJAX 变化:

data: { firstDate: firstDateChanged, lastDate: lastDateChanged, platformConfig: platformConfig, triggered: triggered },

控制器更改:

        public ActionResult BranchCheckBoxes(string firstDate, string lastDate, string platformConfig, string triggered)
    { }

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多