如何使用jquery进行模型绑定

时间:2013-03-12 00:01:38

标签: jquery asp.net-mvc-3

MVC模型绑定器在从我的页面中获取值并将其作为复杂输入中的属性传递给我的操作方法方面做得很好。

我正在尝试创建购物车类型的页面,用户可以在其中配置订单项列表,然后提交整个订单。

起初我使用Ajax表单时,当用户想要添加项目时 - 现有的lineitems列表将被传递回控制器,将添加新的lineitem,并返回列表的部分视图。

不幸的是,看起来在提交Ajax表单后无法重定向到另一个页面。我不想在jQuery中这样做,因为当MVC模型绑定器做得很好时,我不想处理显式创建复杂对象列表。

编辑:澄清一下,这是我的问题:

我希望我的表单有2个操作,这两个操作都需要传回的lineitems列表。

据我了解,我必须使用javascript至少完成其中一项操作。之一:

  1. 使用HtmlForm提交整个订单,返回新视图
  2. 单击“添加项目”按钮时,使用jQuery添加lineitem
  3. OR

    1. 使用AjaxForm动态添加新的lineitems
    2. 在提交订单后使用javascript进行重定向,但这意味着我必须使用javascript提交数据
    3. 有没有办法可以在不使用javascript的情况下执行此操作?当movdel binder没有做任何工作时,我不想自己用JSON创建线条列表。

3 个答案:

答案 0 :(得分:2)

好的,我想明白你需要什么......

  • 从表单操作属性
  • 获取目标操作网址
  • 序列化表单以将其发送到控制器

并重定向到新页面。

$.ajax({
 url: $('#FormID').attr('action'),
 type: 'POST',
 data: $('#FormID').serialize(),
 success: function (result) {
  window.location = result;
 }
});

这里有一些文档信息API jquery .serialize()

答案 1 :(得分:1)

“不幸的是,看起来在提交Ajax表单后你无法重定向到另一个页面。”

这不完全正确。您可以让控制器的操作方法返回javascript重定向的url字符串。

public string SomeMethod(ViewModel vm)
{
  ...
  return "http://www.google.com";
}

并在您的视图中

$.ajax({
 url: "@(Url.Action("SomeMethod"))",
 type: 'POST',
 traditional: true,
 data: { ViewModel: jsonObject },
 success: function (result) {
  window.location = result;
 }
});

答案 2 :(得分:1)

您可以在视图中使用javascript重定向,并使用表单提交返回...在视图底部显示这样的内容。

@if(Model.ShouldRedirect)
{
    <script type="text/javascript">
      window.location = '/path/to/new/url';
    </script>
}