我有一个部分视图来显示产品列表。在此视图中,我在每列上方都有ActionLinks来处理排序。总共有4个,它们都与下面的一个相同:
def require_same_user
redirect_to_root_path unless article_owner? && admin?
end
def redirect_to_root_path
flash[:danger] = 'You can only edit or delete your own articles'
redirect_to root_path
end
def admin?
current_user.admin?
end
def article_owner?
current_user == @article.user
end
为了能够在不丢失任何先前的查询字符串的情况下附加当前URL,我创建了一个静态类AppendQueryString,并在其中创建了一个名为AppendQuery的方法。该课程如下所示:
<div class="col-xs-2">
@Html.ActionLink(Html.DisplayNameFor(m => m.ProductName).ToHtmlString(), "Products", AppendQueryString.AppendQuery("sortOrder", ViewData["ProductNameSort"].ToString()))
</div>
首先,我没有意识到问题是什么,但有些东西试图重写发送到此方法的相同键值,所以我不得不使用那个丑陋的if-else来正确地将键值添加到RouteValueDictionary中继续这个项目。
然而,现在问题很明显,出于某种原因,在页面加载时,我接下来会解雇这四个ActionLink,因此在页面加载时调用AppendQuery方法4次。呈现此局部视图的主视图仅在我确定之后才被调用。你们任何人都知道为什么会这样吗?提前谢谢。