返回一个Javascript数组来执行操作

时间:2014-10-01 12:02:33

标签: javascript jquery asp.net asp.net-mvc

这是我的问题: 我有一个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; }
}

**现在问题是我得到并且空行列表在行动中不是空的...问题是什么,有没有其他方法可以做到这一点? **

3 个答案:

答案 0 :(得分:0)

答案 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并在成功回调时重定向。