MVC模型绑定器在从我的页面中获取值并将其作为复杂输入中的属性传递给我的操作方法方面做得很好。
我正在尝试创建购物车类型的页面,用户可以在其中配置订单项列表,然后提交整个订单。
起初我使用Ajax表单时,当用户想要添加项目时 - 现有的lineitems列表将被传递回控制器,将添加新的lineitem,并返回列表的部分视图。
不幸的是,看起来在提交Ajax表单后无法重定向到另一个页面。我不想在jQuery中这样做,因为当MVC模型绑定器做得很好时,我不想处理显式创建复杂对象列表。
编辑:澄清一下,这是我的问题:
我希望我的表单有2个操作,这两个操作都需要传回的lineitems列表。
据我了解,我必须使用javascript至少完成其中一项操作。之一:
OR
有没有办法可以在不使用javascript的情况下执行此操作?当movdel binder没有做任何工作时,我不想自己用JSON创建线条列表。
答案 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>
}