【问题标题】:Passing a complex objects array from client to server WITHOUT ajax将复杂对象数组从客户端传递到服务器而不使用 ajax
【发布时间】:2014-07-15 10:28:37
【问题描述】:

我有一个表单,希望用户提交到服务器。 (简化的)模型如下所示:

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 的情况下完成。

谢谢。

【问题讨论】:

  • 如果可以使用 AJAX 完成某些事情,也可以使用标准的 POST 或 GET 请求来完成。如果您的端点是process.aspx,您只需要使用&lt;form action="process.aspx"&gt; 而不是$.ajax('process.aspx')
  • @pawel 好的,那么我该如何获取这个 jquery 数组并将其与其他模型字段(在我的情况下为“MyInt”)一起传递给控制器​​?
  • 类似这样的东西:&lt;input type="hidden" name="MyInt" value="&lt;%= MyInt %&gt;"&gt; &lt;input type="hidden" name="ComplexObject" value="" /&gt;,然后在提交表单之前将 ComplexObject 输入的值设置为JSON.stringify( jQueryArray )
  • @pawel - 我希望有另一个解决方案,但最终得到了你的解决方案。请发布答案,以便我接受。谢谢!

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


【解决方案1】:

如果可以使用 AJAX 完成某些事情,那么也可以使用标准的 POST 或 GET 请求来完成。如果您的端点是 process.aspx,您只需要使用 &lt;form action="process.aspx"&gt; 而不是 $.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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多