Javascript 将字符串数组解析为MVC方法
我正在尝试将一个简单的guid/字符串数组解析为json json用作对我的控制器的post调用的参数 我尝试了很多不同的方法,但我无法让控制器方法看到我的列表 数组是根据复选框值生成的:Javascript 将字符串数组解析为MVC方法,javascript,json,asp.net-mvc-3,Javascript,Json,Asp.net Mvc 3,我正在尝试将一个简单的guid/字符串数组解析为json json用作对我的控制器的post调用的参数 我尝试了很多不同的方法,但我无法让控制器方法看到我的列表 数组是根据复选框值生成的: $('input:checkbox').click(function () { if ($(this).attr("checked") == true) { selected.push($(this).val()); } }); 看起来还不错。
$('input:checkbox').click(function () {
if ($(this).attr("checked") == true) {
selected.push($(this).val());
}
});
看起来还不错。
然后我尝试将其转换为JSON
$(document).ready(function () {
$('#Summarize').click(function () {
var arrayJson = {};
for (i in selected) {
arrayJson[i] = selected[i];
}
var json = {
SelectedQuantities: arrayJson
};
$.ajax({
url: "/MVC/Physical/SelectQuantities/@Model.TopID",
type: "POST",
data: JSON.stringify(json),
dataType: "json",
contentType: 'application/json',
success: function (result) {
debugger;
if (result.status == 200)
location.replace = "/MVC/Physical/QuantitySummaryView/@Model.TopID"
else {
//Handle error
}
}
});
});
});
我的控制器方法如下所示:
public ActionResult QuantitySummaryView(Guid id, List<String> SelectedQuantities)
{
"SelectedQuantities": {
"0": "707c40bd-4434-41ed-80fd-4ac541a81e85",
"1": "a8d78a4b-b107-4e1c-97b5-5d8abf530ba8",
"2": "a19226cc-9b22-4174-97e3-bb003d4b2746"
}
}我认为您序列化一个的次数太多了,而且您有一个太多的层。试试这个: 我删除了一个SelectedQuantity,并更改了ajax调用
$(document).ready(function () {
$('#Summarize').click(function () {
var arrayJson = {};
for (i in selected) {
arrayJson[i] = selected[i];
}
var json = {
SelectedQuantities: arrayJson
};
$.ajax({
url: "/MVC/Physical/QuantitySummaryView/@Model.TopID",
type: "POST",
data: JSON.stringify(json),
dataType: "json",
contentType: 'application/json'
});
});
});
另外,尝试Firebug,它将显示您想要的已传递到服务器,因此您可以确保创建和传递的json是正确的。您不需要对json进行字符串化,也不需要添加双
SelectedQuantilities
$(document).ready(function () {
$('#Summarize').click(function () {
var arrayJson = {};
for (var i in selected) {
arrayJson[i] = selected[i];
}
var json = {
SelectedQuantities: arrayJson
};
//json = JSON.stringify(json);
$.post("/Home/QuantitySummaryView/@Model.TopID", json, true);
});
});
但是,根据您的代码,您只能获得选中的项目数(所有项目都等于“on”),您没有任何代码可以传递已选中项目的名称,也不会传递未选中项目的名称。因此,您可能必须更改代码以处理名称/值对。例如:
包含GUID集合的模型:
public class GuidModel
{
public GuidModel()
{
Guids = new List<Guid>();
Guids.Add(Guid.NewGuid());
Guids.Add(Guid.NewGuid());
Guids.Add(Guid.NewGuid());
Guids.Add(Guid.NewGuid());
Guids.Add(Guid.NewGuid());
}
public IList<Guid> Guids { get; set; }
}
我不熟悉asp.net,但您的控制器希望在参数中获得一个列表,但您的jQuery发布一个Json字符串…而不是列表。我会尝试将参数List selectedamountries更改为String selectedamountries,并将json字符串转换为控制器中的列表。希望帮助者感谢您:)这是一个很小但很重要的错误。我不需要名称,我只需要guid。我尝试实现了这个,但它仍然抱怨列表为空。我用您的示例中编辑的代码更新了我的原始问题。你介意再看一下吗?奖金信息。我可以通过使用$.post而不是字符串化来实现它。但无论是否使用stringify,它都无法通过AJAX工作。post(“/MVC/Physical/selectQuantilities/@Model.TopID”,json,函数(数据){location.href=“/MVC/Physical/QuantitySummaryView//@Model.TopID”});
<% var index = 1; %>
<% foreach(var guid in Model.Guids) { %>
<input type="checkbox" value="<%= guid %>" name="guid<%= index %>" />
<%: guid %>
<br />
<% index++; %>
<% } %>
<br />
<input type="button" value="Summarize" id="Summarize" />
<script type="text/javascript">
var selected = [];
$('input:checkbox').click(function () {
if ($(this).attr("checked") == true) {
selected.push($(this).val());
}
});
$('#Summarize').click(function () {
var arrayJson = {};
for (i in selected) {
arrayJson[i] = selected[i];
}
var json = {
SelectedQuantities: arrayJson
};
json = JSON.stringify(json);
$.post("/Home/QuantitySummaryView?data=" + json);
});
</script>
[HttpPost]
public ActionResult QuantitySummaryView(string data)
{
// Deserialize the string containing JSON serialized data
JavaScriptSerializer jss = new JavaScriptSerializer();
//...
}