将字符串数组从 ajax 传递到控制器
Pass array of string from ajax to controller
我需要从 ajax 发送一个字符串数组到控制器,我需要 return 一个要下载的文件。我已经看过了,到处都在说同样的解决方案,但我无法让它发挥作用。我已经在控制器上休息了,但从未进入。
控制器在不同的项目中。
SOLUTION
PROJECT 1
Controllers
ApiControllers
RenderMvcControllers
SurfaceControllers
ExportController
PROJECT 2
function GetData() {
var stringArray = new Array();
stringArray[0] = "item1";
stringArray[1] = "item2";
stringArray[2] = "item3";
var postData = { values: stringArray };
$.ajax({
type: "POST",
url: "/umbraco/Surface/Export/HandleDownloadFile",
data: postData,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
alert();
alert(data.Result);
},
error: function (data) {
alert("Error: " + data.responseText);
},
});
}
class ExportController : SurfaceController
{
[HttpPost]
public ActionResult HandleDownloadFile(string[] productList)
{
return CurrentUmbracoPage();
}
}
如果您通过 AJAX 发送数组值,您需要确保 traditional
属性设置为 true(允许此行为)并且您的参数命名为匹配MVC 期望它应该是什么 productList
:
// This is important for passing arrays
traditional: true,
其次,由于您要将其发布到另一个项目,您可能需要使用绝对 URL 明确定义项目 运行 的位置(因为相对的将被使用默认并且可能指向您当前的项目):
url: "{your-other-project-url}/umbraco/Surface/Export/HandleDownloadFile",
最后,您可能想尝试删除 contentType
属性,因为它用于定义服务器期望在其响应中接收的内容。由于您不期望 JSON 回来(而是期望一个文件),您可以考虑将其删除。
$.ajax({
type: "POST",
// Consider making the URL absolute (as it will be relative by default)
url: "/umbraco/Surface/Export/HandleDownloadFile",
// This is important for passing arrays
traditional: true,
// Make sure that productList is used as it matches what your Controller expects
data: { productList: stringArray }.
dataType: "json",
success: function (data) {
alert(data.Result);
},
error: function (data) {
alert("Error: " + data.responseText);
},
});
我需要从 ajax 发送一个字符串数组到控制器,我需要 return 一个要下载的文件。我已经看过了,到处都在说同样的解决方案,但我无法让它发挥作用。我已经在控制器上休息了,但从未进入。 控制器在不同的项目中。
SOLUTION
PROJECT 1
Controllers
ApiControllers
RenderMvcControllers
SurfaceControllers
ExportController
PROJECT 2
function GetData() {
var stringArray = new Array();
stringArray[0] = "item1";
stringArray[1] = "item2";
stringArray[2] = "item3";
var postData = { values: stringArray };
$.ajax({
type: "POST",
url: "/umbraco/Surface/Export/HandleDownloadFile",
data: postData,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
alert();
alert(data.Result);
},
error: function (data) {
alert("Error: " + data.responseText);
},
});
}
class ExportController : SurfaceController
{
[HttpPost]
public ActionResult HandleDownloadFile(string[] productList)
{
return CurrentUmbracoPage();
}
}
如果您通过 AJAX 发送数组值,您需要确保 traditional
属性设置为 true(允许此行为)并且您的参数命名为匹配MVC 期望它应该是什么 productList
:
// This is important for passing arrays
traditional: true,
其次,由于您要将其发布到另一个项目,您可能需要使用绝对 URL 明确定义项目 运行 的位置(因为相对的将被使用默认并且可能指向您当前的项目):
url: "{your-other-project-url}/umbraco/Surface/Export/HandleDownloadFile",
最后,您可能想尝试删除 contentType
属性,因为它用于定义服务器期望在其响应中接收的内容。由于您不期望 JSON 回来(而是期望一个文件),您可以考虑将其删除。
$.ajax({
type: "POST",
// Consider making the URL absolute (as it will be relative by default)
url: "/umbraco/Surface/Export/HandleDownloadFile",
// This is important for passing arrays
traditional: true,
// Make sure that productList is used as it matches what your Controller expects
data: { productList: stringArray }.
dataType: "json",
success: function (data) {
alert(data.Result);
},
error: function (data) {
alert("Error: " + data.responseText);
},
});