这是我的问题: 我有一个JS数组,我想将它传递给一个动作,然后渲染该动作的视图。 这是我的数组,我填充它使用Jquery就像这样:
var factorlist = [];
factorlist.push({ ID: data.ID, Name: data.Name, number: data.number, SingelPrice: data.SingelPrice, TotalPrice: data.TotalPrice })
(data come from an AJAX Call)
然后我在我的页面中放入一个隐藏的输入元素,将我的数组放入其中并通过提交发送。 这里是隐藏的输入和提交按钮:
<input type="submit" id="input" name="input" />
<input type="hidden" id="list" name="list"/>
这就是我发送它的方式:
$('form').submit(function (event) {
$('#list').val(JSON.stringify(factorlist));
});
这是我将数组发送到的行为:
public ActionResult PrePayment(List<Order> list)
{
return View(list);
}
和我的订单类:
public class Order
{
public int ID { get; set; }
public string Name { get; set; }
public int number { get; set; }
public float SingelPrice { get; set; }
public float TotalPrice { get; set; }
}
**现在问题是我得到并且空行列表在行动中不是空的...问题是什么,有没有其他方法可以做到这一点? **
答案 0 :(得分:0)
您应该使用Json
代替JS array
。更多详情
http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonresult(v=vs.118).aspx
答案 1 :(得分:0)
在这种情况下,默认的MVC数据绑定对您不起作用,您必须手动反序列化您的值:
var js = new JavaScriptSerializer();
list = (Order[])js.Deserialize(Request.Form["list"], typeof(Order[]));
为避免每次都为该类型注册自定义模型绑定时执行此操作,请查看http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder
中的示例答案 2 :(得分:0)
如果我理解你,你想将你的js数组从表单发布到控制器动作,所以基于这个article有一个解决方案:
$('form').submit(function (event) {
$(factorlist).each(function (i, el) {
$('form').append($('<input />', {
type: 'hidden',
name: 'list[' + i + '].ID',
value: el.ID
}));
// and so on for each your of objects property
});
});
更正确的方法是使用ajax并在成功回调时重定向。