簡體   English   中英

jQuery AJAX 調用控制器動作傳遞值數組

[英]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

來自AJAX 的 jQuery API

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.

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