【问题标题】:$.ajax method not calling the controller action method$.ajax 方法未调用控制器操作方法
【发布时间】:2014-07-27 10:12:30
【问题描述】:

我在@Html.ActionLink clicked 事件上调用 javascript 函数。 Javascript函数调用jquery函数,我在其中编写了$.ajax方法来调用json控制器方法。但它并没有调用控制器方法.......

这是我的代码:

查看

@Html.ActionLink("Submit", "AdminEvaluate", "Application", new { onclick = "Show('" + Model.applicationList.ApplicationId + "','statusList')" })|

这里,ApplicationId 来自数据库,statusList 是单选按钮组名称,我需要从中找到选定的单选按钮。

Javascipt 和 jQuery 代码

function Show(appId, appStatus) {
    $.fn.gotof(appId,appStatus);
}

从视图中获取参数并传递给 jQuery 函数

jQuery 函数

$(document).ready(function () {
    $.fn.gotof = function (appId, appStatus) {
        var selectedItem = $("input[name='" + appStatus + "']:checked").val();  
        $.ajax({
            url: '/Application/UpdateApplicantStatus',
            data: { id: appId , status: selectedItem},
            traditional: true,
            dataType: "json",
            contentType: "application/json",
            success: function (data) {
                alert(data);
            }
        });
    });

控制器方法

public JsonResult UpdateApplicantStatus(int id, string status){
    return Json("Correct", JsonRequestBehavior.AllowGet);
}   

我在控制器方法上设置了断点,但它没有到达断点。

提前致谢。

【问题讨论】:

  • 我认为ApplicationController应该是Application
  • 你应该使用@Url.Action(...)
  • 我也使用了@url.Action,但它不起作用
  • 是的,那么您只需要使用应用程序
  • 为什么只使用应用程序......我在许多控制器中使用过,但我之前没有遇到任何问题......

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

这个示例可能对你有帮助:) 告诉我

ajax 调用类型:

 $.ajax({
            type: "GET",
            url: '@Url.Action("UpdateApplicantStatus", "Application")',
            contentType: "application/json; charset=utf-8",
            data: { id: appId , status: selectedItem },
            dataType: "json",
            success: function() { alert('Success'); }

            });

控制器:

public ActionResult UpdateApplicantStatus(int id, string status){
    return Json(// blah blah blah ...
}  

这应该可以,否则请告诉我

【讨论】:

  • 哇,非常感谢..现在控制方法正在控制器上,非常感谢.....
  • 嗯,很高兴它有帮助:) 好吧,我猜在 ajax 调用中你没有提到 GET 和 url 是完美的,没有问题。您尝试使用 actionResult 或 jsonResult 吗?让我知道 。如果您使用了 jsonresult 并且成功了,则意味着 type="GET" 是这里的罪魁祸首(ajax 调用查找要调用的默认类型是控制器中的 httpget )。很难找到这些小错误。小事情花费了我们更多的时间:)
  • 但我也使用了 get 和 post .. 但结果是一样的。我唯一没有使用的是 contentType: "application/json; charset=utf-8",.. charset 我没用过....如果我们使用或不使用它会有什么不同... .
  • 我在动作结果和json结果中都使用了它,但它仍然没有进入控制器方法
  • charset UTF-8 用于浏览器依赖目的,即编码类型的东西。 IE以外的你试过吗?
【解决方案2】:

你的 ajax 调用是错误的。

如果你的控制器方法签名是

public JsonResult UpdateApplicantStatus(int id, string appStatus)

那么您的参数名称必须与您的 ajax 调用的参数相匹配。
所以,而不是

data: { id: appId , status: selectedItem}

随便写

data: { id: appId , appStatus: selectedItem}

如果您有任何其他问题,只需在浏览器控制台中发布您应该遇到的错误。

【讨论】:

  • 我已根据您的建议更改了名称,但控件仍然没有进入控制器方法,并且我的浏览器控制台中没有错误
【解决方案3】:

可能控制器函数和ajax调用函数的参数名称应该匹配。

你可以试试这个

数据:{id:appId,appStatus:selectedItem},

【讨论】:

  • 我已经按照你的建议改了名字,但还是有同样的问题
  • @Ravindra 您在应用程序中使用区域吗?
  • 不,我没有使用任何区域
【解决方案4】:

这样做实际上有 3 个错误 1 ​​由@Mr Code 通知类型丢失 第二个参数不匹配,因为您的函数需要一个您以错误格式发送数据..

$(document).ready(function () {
    $.fn.gotof = function (appId, appStatus) {
        var selectedItem = $("input[name='" + appStatus + "']:checked").val();  
        $.ajax({
            url: '/ApplicationController/UpdateApplicantStatus',
data:"{'id':'" + appId + "', 'appStatus': '" + selectedItem+ "'}",//here you format is wrong i correct it
            traditional: true,
            dataType: "json",
            contentType: "application/json",
            success: function (data) {
                alert(data);
            }
        });
    });

【讨论】:

    【解决方案5】:

    坐了几个小时:

    When using ajax - json in a js.script file:
    
    the url is written with its real path e.g. -  url: '/contoller/Action',
    
    
                                    $.ajax({
                                       url: '/NextPage/GetSpDropDown',                                      
                                       data: {'segInputVal': segInputVal}, 
                                        cache: false, 
                                        type: "GET",
                                        dataType: "json",
                                        success: function (result) {
                                         if (result.Success) {
                                         var resultArray = result.Result;.....
    

    如果脚本是在您的 HTML 页面中编写的,那么您必须使用

    @(Url.Action(Action,controller))
    
                                       $.ajax({
                           url: "@(Url.Action("GetSpDropDown", "NextPage"))",
                                        data: { 'segInputVal': segInputVal },
                                        cache: false,
                                        type: "GET",
                                        dataType: "json",
                                        success: function (result) {
                                         if (result.Success) {
                                         var resultArray = result.Result;....
    

    别忘了不要在控制器名称中包含单词控制器。

    我从 stackoverflow 得到了很多帮助——希望能有所回报

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2017-05-08
      • 2021-05-22
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多