好的,所以我的问题是双管齐下的。我试图从选定的行中检索特定的字符串值到JQuery数组:
<script>
var finalCSG=[];
$('.checkbox').change(function () {
var csg = [];
var checkedRows = $('.checkbox:checked');
$.each(checkedRows, function (index, item)
{
var row = $(this).closest('tr');
csg.push(row.find('.connote').text());
})
finalCsg = csg;
});
</script>
我的第一个问题:数组'finalCsg'的内容应该是简单的字母数字字符串,但是它们包含许多前导和尾随空格(当我使用console.log来检查它们时)。我该如何解决这个问题?
现在,第二个也是更紧迫的问题。我尝试将此数组传递给我的MVC控制器(单击按钮),代码如下:
var url = '@Url.Action("Assign", "TransactionHistory")';
document.getElementById("AssignButton").onclick = function () { myFunction() };
function myFunction() {
$('#myDiv').load(url, { csgList: finalCsg })
}
'TransactionHistory'是我的控制器名称。即使在这里,变量csgList也包含正确的数组元素(使用我之前描述的那些空格,当我用console.log检查时)。但我的控制器只获得一个空字符串。控制器的定义如下:
[HttpPost]
public ActionResult Assign(List<string> csgList)
{
return Content("Hi");
}
我最初尝试使用string [] csgList作为参数,然后尝试使用List,但它总是从JQuery获取一个空值(或者我猜的是空字符串)(返回语句只是为了测试,现在并不是很有意义)。有些帖子提到了“传统”关键字的使用,但我主要不是前端开发人员(我在工作中为某人工作,有严格的截止日期)所以我无法使用它来达到正确的效果。
任何输入都会非常有益。
答案 0 :(得分:2)
由于您传递了一组简单值,因此您可以使用traditional: true
ajax选项正确绑定到List<string> csgList
。
var url = '@Url.Action("Assign", "TransactionHistory")';
var element = $('#myDiv');
$.ajax({
url: url,
type: 'POST',
traditional: true,
data: { csgList: finalCsg },
success: function (response) {
element.html(response);
}
});
另一种方法是stringify
数据并设置contentType
选项(如果您的数组包含对象而不是简单值,则需要此替代方法)
$.ajax({
url: url,
type: 'POST',
data: JSON.stringify({ csgList: finalCsg }),
contentType: "application/json; charset=utf-8",
success: function (response) {
element.html(response);
}
});