将复杂对象数组从客户端传递到服务器而不使用ajax

时间:2014-07-15 10:28:38

标签: jquery asp.net-mvc model-view-controller

我有一个表单,我希望用户提交到服务器。 (简化)模型看起来像这样:

public class MyData
{
    public int MyInt { get; set; }
    public ICollection<ComplexObject> MyArray { get; set; }
}

public class ComplexObject
{
    public int MyComplexObjectInt { get; set; }
    public string MyComplexObjectString { get; set; }
}

接收此对象的控制器操作如下所示:

[HttpPost]
public ActionResult Create(MyData model)
{
    ...
}

我在客户端(jQuery)中有一个“ComplexObject”数组,我用用户的输入填充。

问题:如何设置“MyArray”值以包含jQuery数组值并在控制器中检索此数组?

注意:我已经搜索过这个问题了,我发现的所有解决方案都谈到了ajax。我对这些解决方案并不感兴趣,我想知道是否可以在没有ajax的情况下完成。

感谢。

1 个答案:

答案 0 :(得分:0)

如果可以使用AJAX完成某些操作,也可以使用标准的POST或GET请求来完成。如果您的终端是process.aspx,则只需使用<form action="process.aspx">代替$.ajax('process.aspx')

因此,如果您需要从后端获取一些数据,将其与用户提供的数据相结合,然后在服务器上使用完整的往返(不是AJAX)处理它,您可以使用表单和隐藏的输入:

<form action="process.aspx" method="POST" id="myForm">
    <input type="hidden" name="MyInt" value="<%= MyInt %>" /> 
    <input type="hidden" name="ComplexObject"   value="" />
</form>

然后,当您需要发送ComplexObjectMyInt时,您可以将该对象序列化为JSON字符串,将其放入隐藏字段并提交表单:

$('[name="ComplexObject"]').val( JSON.stringify( userObject ) );
$('#myform').submit();