asp.net-mvc-4 - 使用 MVC 4.0,RedirectToAction 不会将 PartialView 呈现为 Partial,它会发送整个页面

标签 asp.net-mvc-4 c#-5.0 asp.net-mvc-partialview

我得到的东西有点复杂,但我不明白为什么它不起作用: 我的 Index.cshtml 中有一个 JSTree。选择节点后,我会进行 Ajax 调用

public async Task<ActionResult> GetEBooksItems(string id)

返回部分 View 。这非常有效。

现在,除了树搜索之外,我还有一个表单可以添加一些条件来缩小搜索范围。我使用 Ajax.BeginForm 将数据发送回 Controller 。

        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 调用第一个方法。

我一直在尝试我能想到的一切,我总是得到整个页面的结果,而不是像第一种方法那样的部分 View 。

看来对 GetEBooksCustom 的调用并未“被视为”Ajax 调用。 我想念什么? 感谢您的帮助, 伯纳德。

****6小时后编辑< em>**********

在这之间,我做了建议的事情,即从“GetEBooksItems”中提取功能,以便能够直接返回 PartialView 而不是使用 RedirectToAction。在调试器中,看起来一切都很完美,我看到来自服务器的 200 答案,但我仍然得到整页显示,并且 url 显示 Controller 方法,而 ajax 调用不应该出现这种情况。

问题是,我在其他地方有基本上相同的形式,它按预期工作。看不出有什么不同???

一如既往,感谢您的帮助和建议。 伯纳德

最佳答案

我认为发生这种情况是因为 RedirectToAction 返回 302 到您的浏览器,指示它重定向到另一个操作。您的浏览器通过重定向整个页面来处理此问题。您应该(在某种程度上取决于 GetEBooksItems 方法的内容),只需直接调用其他方法而不是使用重定向即可解决此问题:

return GetEBooksItems(vm.CategoryNodeId);

或者,更好的是,将 GetEBooksItems 中的逻辑抽象为一个单独的方法,在 GetEBooksCustom 中重用它并直接返回 PartialView。这样您就根本不必解决重定向问题。

关于asp.net-mvc-4 - 使用 MVC 4.0,RedirectToAction 不会将 PartialView 呈现为 Partial,它会发送整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16131810/

相关文章:

asp.net - 异步代码,无需等待完成

javascript - 无法在按钮上初始化 Jquery DataTables 单击 Ajax 调用

css - IIS 中的 FontAwesome 错误

javascript - 如何在 HTML CSS 网络应用程序中使用通用的页眉和页脚?

c# - C# 中的语法启用模式是什么?

c# - 如何编写 C# 5 异步?

asp.net-mvc - 部分 View 的验证总结

ajax - 替换 Mvc 部分 View 后的 select2 jquery 不再起作用

jquery - 使用低调的 Ajax 举办全局事件

c# - 从 Controller 返回局部 View ?