如何在jquery中使用模型绑定

如何在jquery中使用模型绑定,jquery,asp.net-mvc-3,Jquery,Asp.net Mvc 3,MVC模型绑定器在从我的页面中提取值并将它们作为复杂输入中的属性传递到我的操作方法方面做得非常好 我正在尝试创建一个购物车类型的页面,用户可以在其中配置行项目列表,然后提交整个订单 起初,当用户想要添加项目时,我使用Ajax表单——现有行项目的列表将传递回控制器,添加新的行项目,并返回列表的部分视图 不幸的是,在提交Ajax表单后,您似乎无法重定向到另一个页面。不过,我不想在jQuery中这样做,因为我不想在MVC模型绑定器做得如此出色时显式地创建复杂对象列表 编辑:澄清一下,我的问题是: 我希

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

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

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


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

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

我希望我的表单有2个操作,这两个操作都需要传递回行项目列表

我的理解是,我必须使用javascript至少执行其中一个操作。要么:

  • 使用HtmlForm提交整个订单,返回新视图
  • 单击“添加项”按钮时,使用jQuery添加行项
  • 使用AjaxForm动态添加新的行项目
  • 在提交订单后使用javascript进行重定向,但这意味着我也必须使用javascript提交数据
  • 有没有一种不用javascript就能做到这一点的方法?当movdel活页夹在不做任何工作的情况下创建行项目列表时,我不想自己使用JSON创建行项目列表。

    “不幸的是,在提交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;
     }
    });
    
    “不幸的是,在提交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;
     }
    });
    

    您可以在视图中使用javascript重定向,该视图随表单提交返回。。。在您的视图的底部有类似的内容

    @if(Model.ShouldRedirect)
    {
        <script type="text/javascript">
          window.location = '/path/to/new/url';
        </script>
    }
    
    @if(Model.ShouldRedirect)
    {
    window.location='/path/to/new/url';
    }
    
    您可以在视图中使用javascript重定向,并随表单提交返回。。。在您的视图的底部有类似的内容

    @if(Model.ShouldRedirect)
    {
        <script type="text/javascript">
          window.location = '/path/to/new/url';
        </script>
    }
    
    @if(Model.ShouldRedirect)
    {
    window.location='/path/to/new/url';
    }
    
    好的,我想我知道你需要什么

    • 从表单操作属性获取目标操作url
    • 序列化表单以将其发送到控制器
    并重定向到新页面

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

    这里有一些文档信息

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

    • 从表单操作属性获取目标操作url
    • 序列化表单以将其发送到控制器
    并重定向到新页面

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


    这里有一些文档信息

    请澄清您的问题。我不知道你的问题是模型绑定、重定向还是什么…@DaveA,删除了最后一部分,并用更清晰的解释替换了它,更加清晰。但是你似乎已经有了两个有效的答案。@DaveA所以我注定要创建json对象来模仿model binder已经做过的事情?请澄清你的问题。我不知道你的问题是模型绑定、重定向还是什么…@DaveA,删除了最后一部分,并用更清晰的解释替换了它,更加清晰。但是你似乎已经有了两个有效的答案。@DaveA所以我注定要创建json对象来模仿model binder已经做过的事情?我仍然必须自己创建ViewModel json,对吗?还有什么方法可以让模型绑定器获得这些信息吗?我仍然需要自己创建ViewModelJSON,对吗?还有什么方法可以让模型绑定器获取这些信息吗?有什么方法可以将模型作为参数传入?将模型作为参数传递给what?进入对该url调用的action方法。您只需使用
    @
    窗口一样输出它。location='@url.action(“action”,“Controller”,new{id=model.id})
    ;是否有方法将模型作为参数传递?将模型作为参数传递给what?到对该url调用的action方法中。您只需使用
    @
    窗口一样输出它。location='@url.action(“action”,“Controller”,new{id=Model.id})
    ;非常感谢。这正是我需要的。工作非常完美,而且我自己也不会在创建JSON对象时乱来。谢谢!这正是我需要的。可以完美地工作,而且不需要自己创建JSON对象。