代码之家  ›  专栏  ›  技术社区  ›  Rod

同一页面上的2个Ajax表单发布同一文本框

  •  0
  • Rod  · 技术社区  · 15 年前

    是否可以像文本框中的值一样,将两个不同的Ajax表单发布到同一页上?不一定是同时的吗?

    我要做的是:我有一个搜索页面,可以搜索客户并将其显示在页面网格上。用户最多可以指定5个参数(5个文本框)来缩小搜索范围。

    在同一页上,我有一个导出选项。好吧,因为我需要所有的客户进行搜索,而不仅仅是页面数据,所以我需要一种方法,通过网格中使用的相同参数,将这个选项发回服务器。

    我使用的是一个viewModel,如果我能将它传递回服务器,而不是视图模型所支持的单个搜索字段,那就更好了。

    谢谢, 罗德查尔

    2 回复  |  直到 15 年前
        1
  •  1
  •   Tomas Aschan    15 年前

    因为您在执行Ajax请求,所以我们可以安全地假设允许JS;)

    因此,使用jquery(或另一个JS库)执行Ajax回发,并只发送到不同的URL。

    function postTo(url) {
        $.post(
            url,
            $('#theForm').serialize(),
            function(returnData) {
                // do this on success
            }
        );
    }
    

    然后,只需将此方法的两个不同调用连接到提交链接/按钮:

    $(function() {
        $('#searchButton').click(function() {
            postTo('/search/');
        });
    
        $('#exportButton').click(function() {
            postTo('/export/');
        });
    });
    

    编辑 针对评论中的后续问题:

    问题1)控制器如何解析 $('#theForm').serialize() 到A ViewModel 对象?

    a1)这都是ASP.NET MVC模型绑定的一部分,与jquery代码无关。全部的 .serialize() 对窗体执行的操作是以类似查询字符串的格式排列其名称和值,以便 data 在json对象上 'textbox1=first value&textbox2=second value' 所有形式值。这与常规POST请求的工作方式相同,因此ASP.NET MVC不需要以任何不同于常规非Ajax请求的方式来处理它。

    q2)控制器是否可以返回实体对象,回调是否可以读取它?

    a2)您可以使用 return Json(...) 在您的控制器中,但不建议返回和实体对象(我假设它来自实体框架)。最好有一个只有必要属性的数据传输对象(DTO)。
    至于回调,只要输入数据格式正确,ASP.NET MVC模型绑定器就可以识别任何对象。

        2
  •  1
  •   griegs    15 年前

    使用jquery回发。您可以在javascript中从您喜欢的任何字段构建模型,并发布到您喜欢的任何控制器/操作。

            $.post("/Articles/jQueryAddComment",
     { commentText: commentText, id: id, type: commentType }, function(newCommentListHTML) {
            });