我在每一页上都有一个 A - Z 目录“小部件”。如果用户在主页上并且他们单击目录中的某些内容,我想加载目录页面并加载相应的结果。但是,如果用户在目录页面上并且他们点击了某些东西,我想异步加载结果而不进行页面刷新。
目录小部件具有指向 GroupController 上的 DirectoryResult 操作方法的链接,如果它们位于目录页面上,通常会返回 PartialView。但是如果它们不在目录页面上,我会重定向到主目录操作方法,该方法返回一个视图并加载整个页面。
这是有问题的代码:
public ActionResult DirectoryResult(string search)
{
if (Request.IsAjaxRequest())
{
var groups = _groupService.GetGroupsBySearchExpression(search);
var premiumGroups = _groupService.FilterPremiumGroups(groups);
return PartialView(new FundDirectoryViewModel
{
Groups = groups,
PremiumGroups = premiumGroups
});
}
else
{
TempData[UIMessageDataKeys.FundDirectorySearch] = search;
return RedirectToAction("Directory", "Group");
}
}
我把这个给办公室里的一个人看,他的第一反应是“那是个黑客!”。我不知道是否同意他的观点,因为我不知道有什么更好的方法来做到这一点。
作为参考,这是每个页面上存在的小部件的定义:
<div id="DirectoryList" class="directory-list">
<span>Fund Directory</span>
<% var letters = new [] { "A", "B", "C", "D", "E", "F", "G", "H", "I", ... }; %>
<% var current = (Model.Search.IsNotNullOrEmpty()) ? Model.Search : "A"; %>
<% foreach (var letter in letters) { %>
<span>
// use HtmlHelper extension to generate links as our system needs them
<%= Html.RouteActionLink("funddirectory", "DirectoryResult"
, letter
, (letter.ToLower() == current) ? new { @class = "active" } : new { @class = "" })%>
</span>
<%} %>
</div>
有没有更好的方法让我根据请求来自的页面来确定我应该返回 PartialView 还是 View ?