是否可以将文本框中的值发布到同一页面上的2个不同的ajax表单中?它不一定是在同一时间?
我要做的是:我有一个搜索页面,搜索客户并在分页网格上显示它们。用户最多可以指定5个参数(5个文本框)来缩小搜索范围。
在同一页面上,我有一个导出选项。好吧,因为我希望所有客户都能进行搜索,而不仅仅是分页数据,我需要一种方法将该选项发回服务器,传递网格中使用的相同参数。
我正在使用ViewModel,如果我可以将其传递回服务器而不是视图模型支持的单个搜索字段,那将会很好。
谢谢, rodchar
答案 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) {
});