0

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

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

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

不幸的是,在提交 Ajax 表单后,您似乎无法重定向到另一个页面。不过,我不想在 jQuery 中这样做,因为当 MVC 模型绑定器做得如此出色时,我不想显式地创建复杂对象的列表。

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

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

据我了解,我必须使用 javascript 至少执行其中一项操作。任何一个:

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

或者

  1. 使用 AjaxForm 动态添加新的 lineitems
  2. 提交订单后使用javascript进行重定向,但这意味着我也必须使用javascript提交数据

有没有办法在不使用 javascript 的情况下做到这一点?当 movdel binder 在我没有任何工作的情况下执行此操作时,我不想自己使用 JSON 创建 lineitems 列表。

4

3 回答 3

3

好的,我想了解您的需求...

  • 从表单动作属性中获取目标动作 url
  • 序列化表单以将其发送到控制器

并重定向到新页面。

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

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

于 2013-03-12T01:22:13.007 回答
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;
 }
});
于 2013-03-12T00:06:55.960 回答
1

您可以在您的视图中使用 javascript 重定向,该视图会随着表单提交返回......在您的视图底部有这样的东西。

@if(Model.ShouldRedirect)
{
    <script type="text/javascript">
      window.location = '/path/to/new/url';
    </script>
}
于 2013-03-12T00:07:05.133 回答