簡體   English   中英

jQuery Ajax無法調用MVC 4 Controller方法

[英]jQuery Ajax failing to call to MVC 4 Controller method

我試圖使用jQuery來點擊某個按鈕后觸發Ajax調用。 我已經閱讀了幾個可能遇到的語法和問題的例子,但未能找到適合我的工作的解決方案。 這是代碼。

控制器方法:(HomeController.cs)

    [HttpPost]
    public JsonResult ChangeCompany(string companyCode)
    {
        return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet);
    }

jQuery代碼:

    function changeCompany(company) {
    $.ajax({
        url: '@Url.Action("ChangeCompany", "Home")',
        type: 'POST',
        data: JSON.stringify({ companyCode: company }),

        success: function (data) {
            alert("Company: " + data);
        },
        error: function (req, status, error) {
            alert("R: " + req + " S: " + status + " E: " + error);
        }
    });
}

最后,我正在調用此函數:

$('.companyButton').click(function () {
    compCode = $(this).text();
    debug("Click event --> " + $(this).text());
    changeCompany(compCode);
});

我的調試消息顯示正常,並且Ajax調用經常失敗並顯示以下警告: R: [object Object] S: error E: Not Found

我不完全確定如何做到這一點。

我知道關於這個主題有幾個問題,但是它們似乎都沒有解決我的問題,而且老實說我不確定這些代碼塊有什么問題。 任何見解將不勝感激。

編輯:如果值得注意,這是一個移動設備。 在Windows 8 Phone Emulator(Internet Explorer)和jQuery Mobile上進行測試。 不確定這是否會影響Ajax

編輯2:在查看原始網絡調用之后,似乎'Url.Action("ChangeCompany", "Home")'沒有被轉換為正確的URL而是被直接調用,就好像它是原始URL一樣文本。 這是由於過時的jQuery還是其他一些因素?

好的,你的EDIT2似乎是在一個單獨的JavaScript文件中使用url: '@Url.Action("ChangeCompany", "Home")', 你只能在.cshtml文件中編寫剃刀代碼,它在.js文件中不起作用

您在AJAX調用中缺少一些重要參數。 更改您的AJAX調用如下:

function changeCompany(company) {
    $.ajax({
              url: '@Url.Action("ChangeCompany", "Home")',
              type: 'POST',
              data: JSON.stringify({ companyCode: company }), 
              success: function (data) {
                       alert("Company: " + data);
                        },
             error: function (req, status, error) {
                       alert("R: " + req + " S: " + status + " E: " + error);
                        }
          });}

然后,您可以使用[HttpPost]屬性注釋您的控制器方法,如下所示;

 [HttpPost]
 public JsonResult ChangeCompany(string companyCode)
 {
   return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet);
 }

請注意,您的操作不會直接返回companyCode 您將它分配給Json result屬性因此在您的成功函數中顯示結果您需要:

success: function (data) 
  {
     alert("Company: " + data.result);
  }

另外這個: E: Not Found告訴我你可能有一些路由問題。 如果您在ChangeCompany Action中設置了一個斷點,它是否被擊中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM