我有点复杂,但我不明白为什么它不起作用: 我的Index.cshtml中有一个JSTree。选择节点后,我对
进行Ajax调用public async Task<ActionResult> GetEBooksItems(string id)
返回部分视图。这完美地工作。
现在,除了树搜索之外,我还有一个表单来添加一些标准来缩小搜索范围。我使用Ajax.BeginForm将数据发送回控制器。
public async Task<ActionResult> GetEBooksCustom(GenericSearchViewModel filter)
{
vm = filter;
//Session["GenreNodeId"] = id;
Session["SearchCondition"] = (string.IsNullOrEmpty(vm.Condition) != true) ? vm.Condition : "All";
Session["MaximumPrice"] = (string.IsNullOrEmpty(vm.MaxPrice) != true) ? vm.MaxPrice : "999999";
Session["MinimumPrice"] = (string.IsNullOrEmpty(vm.MinPrice) != true) ? vm.MinPrice : "0";
Session["SearchIndex"] = (string.IsNullOrEmpty(vm.SearchIndex) != true) ? vm.SearchIndex : "KindleStore";
Session["SortOrder"] = (string.IsNullOrEmpty(vm.SortOrder) != true) ? vm.SortOrder : "price";
Session["KeyWords"] = (string.IsNullOrEmpty(vm.Keywords) != true) ? vm.Keywords : "";
Session["Title"] = (string.IsNullOrEmpty(vm.Title) != true) ? vm.Title : "";
Session["Author"] = (string.IsNullOrEmpty(vm.Author) != true) ? vm.Author : "";
return RedirectToAction("GetEBooksItems", new { id = vm.CategoryNodeId });
}
这个方法,然后用RedirectToAction调用第一个方法。
我一直在尝试我能想到的一切,我总是把结果作为整个页面,而不是像第一种方法那样的部分视图。
看起来对GetEBooksCustom的调用并未被视为Ajax调用。 我错过了什么? 谢谢你的帮助, 伯纳德。
** * * 6小时后修改 < EM> * ** * ** * ** *
在我之间我做了所建议的,即从“GetEBooksItems”中提取功能,以便能够直接返回PartialView而不是使用RedirectToAction。在调试器中,看起来一切都很完美,我看到来自服务器的200个答案,但我仍然得到一个完整页面显示,并且url显示控制器方法,而这不应该是ajax调用的情况。 / p>
问题是,我在其他地方基本上具有相同的形式,它按预期工作。看不出有什么不同???
一如既往,感谢您的帮助和建议。 伯纳德
答案 0 :(得分:0)
我会想到这种情况正在发生,因为RedirectToAction
会向您的浏览器返回302,指示它完全按字面意义重定向到另一个操作。您的浏览器通过重定向整个页面来处理此问题。您应该(取决于GetEBooksItems
方法的内容,只需通过直接调用其他方法而不是使用重定向来解决这个问题:
return GetEBooksItems(vm.CategoryNodeId);
或者,更好的是,将GetEBooksItems
中的逻辑抽象为单独的方法,在GetEBooksCustom
中重复使用并直接返回PartialView
。这样你根本不需要解决重定向问题。
答案 1 :(得分:0)
我最终使用jQuery Form plugin而不是Ajax.BeginForm。在这几个小时后,我花了大约10分钟让它完全正常工作!
对于那些可能感兴趣的人,这里有两种类型的编码:
//using (Ajax.BeginForm("GetEBooksCustom", "Home", new AjaxOptions {
// UpdateTargetId = "ListOfBooksHere",
// HttpMethod = "POST",
// OnBegin="ShowProcessingMsg",
// OnComplete="HideProcessingMsg"
$("#eBooksForm").ajaxForm({
url: "/home/GetEBooksCustom",
type: "POST",
success: function(data) {
$("#ListOfBooksHere").html(data);
}
});
我没有打扰OnBegin和OnComplete,因为我正在使用它:
$(document).ajaxSend(function() {
$('.loadingIndicator').show();
});
$(document).ajaxComplete(function() {
$('.loadingIndicator').hide();
});