[英]jQuery AJAX call to Controller action passing array of values
我正在嘗試將一組復選框值從 MVC 中的 Ajax 表單傳遞給控制器操作。 這是我的代碼:
形式(在模態中):
@using (Ajax.BeginForm("GetPrintableProject", "Project", null, new AjaxOptions { HttpMethod = "POST"}, new { @id = "PrintProjectFormId"))
{
<input type="hidden" name="projectId" id="projectId" value="">
}
一些獲取復選框值數組的 jQuery:
selectedProjects = projectsGrid.$('input[type="checkbox"]').serializeArray();
var projects = [];
$(selectedProjects).each(function (i, field) {
projects.push(field.value);
});
//the hidden field in a modal I'm using
$('#projectId').val(projects.toString());
以及我用來提交的功能:
$("#PrintProjectFormId").submit(function (event) {
event.preventDefault();
event.stopImmediatePropagation();
var action = $("#PrintProjectFormId").attr("action");
var dataString = new FormData($("#PrintProjectFormId").get(0));
$.ajax({
type: "POST",
url: action,
data: dataString,
dataType: "json",
contentType: false,
processData: false,
success: function (result) {
//stuff I'll get to later
},
error: function (jqXHR, textStatus, errorThrown) {
alert("There was a problem retrieving this project");
}
});
});
然后是控制器簽名:
[HttpPost]
public JsonResult GetPrintableProject(Guid[] projectId)
如果我傳入一個值,它工作正常,但如果我傳入多個值,控制器只會得到“空”。 認為我在這里遺漏了一些簡單的東西。 提前致謝。
除非您需要,否則我建議不要更改默認選項值。 將參數創建為JSON
對象並將其傳遞給$.ajax
。
processData(默認值:true)
類型:布爾型
默認情況下,作為對象傳遞給 data 選項的數據(從技術上講,除了字符串之外的任何內容)將被處理並轉換為查詢字符串,適合默認的內容類型“application/x-www-form-urlencoded” . 如果要發送 DOMDocument 或其他未處理的數據,請將此選項設置為 false。
除非您在控制器函數中進行處理,否則在嘗試將多個值傳遞給操作時,將此值設置為 false 會導致問題。
var action = $("#PrintProjectFormId").attr("action"); //fill projects array $.ajax({ type: "POST", url: action, data: { projectId: $("#PrintProjectFormId").val(), "projects": projects }, success: function(result) { //stuff I'll get to later }, error: function(jqXHR, textStatus, errorThrown) { alert("There was a problem retrieving this project"); } });
請試試這個:
type: "POST",
url: action,
data: {dataString:dataString, dataString1:dataString2, dataString2:dataString2},
格式為:索引:值
由於您不是傳遞類而是數組,因此您的數據字符串應如下所示:
type: "POST",
url: action,
data:
[
"6ccf7071-9b73-4e61-8736-58a842c131d0",
"9e6c2748-18b5-4a53-a306-eb539c8b7dee",
"5aa8901a-2c03-42d3-bf06-89f66e3797a4",
"da5556bf-32aa-4f41-a64a-6e95fa2595c1"
],
還可以嘗試在 ActionMethod 中添加FromBody
,例如:
[HttpPost]
public JsonResult GetPrintableProject([FromBody]Guid[] projectId)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.