2014-07-24 40 views
0

我有我的asp.net mvc的視圖內以下字段我的操作方法: -如何通過我的對象ID來使用Ajax和jQuery

@foreach (var item in Model) { 
    @Html.CheckBoxFor(model => item.CheckBoxSelection, new { @value = item.TMSServerID.ToString() }) 
} 

和我寫了下面的jQuery選擇的值如果選擇複選框: -

$('body').on("click", "#transferSelectedServers", function() { 
    var boxData = []; 
    $("input[name='CheckBoxSelection']:checked").each(function() { 
     boxData.push($(this).val()); 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "@Url.Content("~/Server/DeleteSelected")", 
     data: { ids: boxData.join(",") } 
    }) 
}); 

和我有以下操作方法: -

[HttpPost] 
[ValidateAntiForgeryToken] 
public string DeleteSelected(string ids) 

,但目前傳遞給我的操作方法的值將是空字符串。

+1

第一個複選框數據數組的長度在傳遞給ajax之前。可能是數組有問題,長度爲零 –

+0

不確定不要填充數組,但是傳遞數組並使action方法參數爲'public string DeleteSelected(int [] ids){.. '? - 注意你需要在ajax選項 –

回答

1

您的控制器包含ValidateAntiForgeryToken屬性。由於您未將抗僞造令牌傳遞給您的ajax請求,因此您將收到錯誤消息。

如果你檢查你的響應體,你可能會看到錯誤。

所以,你有兩個選擇

  1. 取出ValidateAntiForgeryToken屬性
  2. 保持ValidateAntiForgeryToken並通過令牌在隨着你的IDS

更新

使用發送AntiForgeryToken Ajax

通過添加以下

@Html.AntiForgeryToken() 

這會產生這樣的隱藏字段渲染視圖中的antiforgerytoken ...

<input type="hidden" value="SSjplL_6t1bxDmb8qTdHcqX5ScafLxw4kmFMzc1dJ7T4kuXfL3aiDWIrwEjk9JKsUV4TGUsENKbRTRJ0W2zYLeHjmtCg02TZQBDevWeRYEA1" name="__RequestVerificationToken"> 

所有你需要做的就是越過使用__RequestVerificationToken該值作爲對象名稱。

所以,你的Ajax調用看起來像現在這樣......

var token = $("input[name='__RequestVerificationToken']").val(); 

    $.ajax({ 
     type: "POST", 
     url: "@Url.Content("~/Server/DeleteSelected")", 
     data: { ids: boxData.join(","), __RequestVerificationToken: token } 
    }) 

希望這有助於!

+0

中設置'traditional:true'你是對的,這導致了問題,但是有沒有辦法通過使用jquery的抗干擾標記? –

+1

@johnG當然 - 請參閱我的更新 – heymega

+0

非常感謝很多。 –

相關問題