2个ajax在同一页面上发布相同的文本框

时间:2010-05-06 23:10:55

标签: asp.net-mvc jquery

是否可以将文本框中的值发布到同一页面上的2个不同的ajax表单中?它不一定是在同一时间?

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

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

我正在使用ViewModel,如果我可以将其传递回服务器而不是视图模型支持的单个搜索字段,那将会很好。

谢谢, rodchar

2 个答案:

答案 0 :(得分:1)

由于您正在执行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/');
    });
});

编辑以回应评论中的后续问题:

Q1)控制器如何将$('#theForm').serialize()解析为ViewModel个对象?

A1)这是ASP.NET MVC模型绑定的所有部分,与jQuery代码无关。表单的所有.serialize()都是以类似查询字符串的格式排列其名称和值,以便JSON对象上的data最终会出现'textbox1=first value&textbox2=second value'等所有表单的内容值。这与常规POST请求的工作方式相同,因此ASP.NET MVC不需要像常规的非AJAX请求那样处理它。

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

A2)您可以使用控制器中的return Json(...)将大多数对象序列化为JSON,但不推荐返回和实体对象(我假设它来自实体框架)。拥有仅具有必要属性的数据传输对象(DTO)要好得多 至于回调,只要输入数据格式正确,ASP.NET MVC模型绑定器就可以识别任何对象。

答案 1 :(得分:1)

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

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