2017-08-10 95 views
0

我的意圖是更新數據庫,而不是完全重新加載當用戶提交數據時用戶所在的當前頁面,而不是彈出消息框表示成功或失敗,或類似的東西。ASP MVC 6 AJAX錯誤請求

我有以下JS功能,當用戶單擊按鈕時調用。

function saveListItem(formID) 
{ 
    alert('JS function fired.'); 
    var _form = $('#mainForm' + formID) 
    var _formData = _form.serialize(); 

    $.ajax({ 
     dataType: "json", 
     type: "POST", 
     url: "/Postings/listItemSubmitted", 
     contentType: "application/json; charset=utf-8", 
     data: { type: "test" }, 
     success: function() { 
      alert("success"); 
     }, 
     error: function (xhr, status, error) 
     { 
      alert(error.toString()); 
     } 
    }); 
} 

這裏是控制器動作:

[HttpPost] 
[ValidateAntiForgeryToken] 
public JsonResult listItemSubmitted([FromBody] string type) 
{ 
    type += "!!!"; 
    return Json(type); 
} 

正如你所看到的,我有幾個變數,後來我打算用實際做一些事情。但現在,我只是試圖讓這個測試工作。問題在於控制器中的動作甚至不會觸發。錯誤警報提供給我「錯誤的請求」。

我檢查過名字,所有的名字都是正確的(控制器是PostingsController.cs,方法名是listItemSubmitted)。我已經嘗試了URL語法前後各個斜線的組合。我甚至嘗試過使用@ Url.Action方法,它給了我那個字符串,所以我知道它是正確的。

我不知道還有什麼可以嘗試的。有誰知道發生了什麼事?

+0

試圖給整個網址:「HTTP://主機/職位/ listItemSubmitted」, – volkinc

+2

嘗試刪除[ValidateAntiForgeryToken]屬性 - 你是不是與你的訊息發送令牌,以便這將防止從工作的要求。 –

回答

0

我認爲您在控制器中使用ValidateAntiForgeryToken作爲過濾器存在問題。您必須將相關輸入值與您的數據一起發送到服務器。嘗試刪除此過濾器。

+0

如果OP在視圖中包含了@ Html.AntiForgeryToken(),那麼var _formData = _form.serialize();將包含標記 –

+0

@StephenMuecke如果OP將序列化表單數據發送給服務器,但在這裏他們沒有這樣做,所以我建議刪除過濾器。 –

+0

是的,他們有 - 這是什麼'var _formData = _form.serialize();':) :) –