我是ASP.NET MVC中AJAX调用的新手。我试图弄清楚如何将以下参数传递给我的控制器。
LeadController:
[HttpPost]
public void SaveWebLeadforYear(string office, int year, int[] values)
{
int index = 0;
WebLead.removeByYear(office, year);
for (int m = 0; m < months.Length; m++)
{
if (index < values.Length) {WebLead.Save(office, values[index++], months[m], year); }
}
}
JavaScript的:
var leadList = new Array();
//scan through the text boxes
$('#WebLeadsEntry').find(' input:text').each(function () {
leadList.push($(this).val().trim() == "" ? -1 : $(this).val());
});
debugger
$.ajax({
type: "POST",
url: '/Lead/SaveWebLeadforYear',
//data: { 'office': office1, 'year': parseInt(year1)},
data:
{
office: $("#officeList").val(),
year: $("#yearList").val(),
values: JSON.stringify(leadList),
},
contentType: "application/json; charset = utf-8",
datatype: "json",
async: true,
cache: false,
success: function (response) {
debugger
//table is saved to the database, remove the tab
},
error: function (x, e) {
debugger
window.location.href = "/Lead/Errorpage";
}
});
总是会出错。你知道为什么吗?
答案 0 :(得分:1)
构建一个javascript对象来表示您的数据。请致电JSON.stringify
。您的HttpPost操作方法将能够获取数据。
此代码应该有效。
$(function () {
$("#btnSave").click(function (e) {
e.preventDefault();
var leadList = [];
$('#WebLeadsEntry').find(' input:text').each(function () {
leadList.push($(this).val().trim() == "" ? -1 : $(this).val());
});
var model = {
office: $("#officeList").val(),
year: $("#yearList").val(),
values: leadList,
};
$.ajax({
type: "POST",
url: '/Account/SaveWebLeadforYear',
data: JSON.stringify(model),
contentType: "application/json; charset = utf-8",
datatype: "json",
async: true,
cache: false,
success: function (response) {
console.log(response);
},
error: function (x, e) {
console.log('err');
}
});
});
});
另外,作为旁注,我不会硬编码url属性值的路径。使用Url.Action
html辅助方法生成action方法的路径是一个安全的想法。例如,如果您将脚本放在视图中,则可以执行此操作,
$.ajax({
type: "POST",
url: '@Url.Action("SaveWebLeadforYear","Account")',
如果您的脚本位于单独的js文件中,则可以创建变量以将URL保存到不同的操作方法,并在视图中设置这些变量的值,并在同一页面/视图的其他javascript文件中再次使用它