【问题标题】:How to disable current page links in ASP.NET MVC?如何禁用 ASP.NET MVC 中的当前页面链接?
【发布时间】:2010-03-14 19:45:42
【问题描述】:
我现在正在研究 ASP.NET MVC,并注意到在默认情况下由 Visual Studio 创建的 ASP.NET MVC 应用程序中,当用户在“主页”上时,链接“主页”和“关于”保持活动状态和“关于”页面对应,点击当前页面链接页面后会自动重新加载。
禁用指向用户已经打开的页面的链接的正确方法是什么?
如何在不违反 ASP.NET MVC 方法的情况下做到这一点?
【问题讨论】:
标签:
asp.net-mvc
user-interface
【解决方案1】:
在 html 方面的“禁用”只是删除 href 标记。这里不能有任何 asp-net-mvc-magic。您需要以将当前页面的 href 设置为 "" 的方式呈现菜单。
有关详细信息,我建议您参考“Pro ASP.NET MVC Framework”一书,第 5 章。
【解决方案2】:
我倾向于认为您应该允许链接保持活动状态,即使在所选页面上也是如此。这样您就可以允许用户在需要时显式地刷新他们对您正在显示的数据的视图。该链接应突出显示以表明这是当前选择的页面。
否则,如果您不希望用户刷新页面,则应完全删除链接(或<li /> 或其他),以便在应用程序上下文中不存在刷新页面的概念,不要通过禁用的链接指示当前选择的页面,而是使用明确的标题。
要实现此结果,您可以使用以下方法:
$("#menu").find('*[href]').each(function(index) {
if ($(this).attr("href") == window.location.pathname) {
$(this).parents("li").html("");
}
});
如果您需要保持元素可见,只需删除 href:
$("#menu").find('*[href]').each(function(index) {
if ($(this).attr("href") == window.location.pathname) {
$(this).removeAttr("href");
}
});
但我也会修改样式,使它看起来不像是断开的链接或其他东西。
【解决方案3】:
这是我认为 javascript 符合要求的情况之一。对于禁用了 javascript 的一小部分用户,链接只是处于活动状态 - 没什么大不了的,但对于大多数用户来说,每个页面上的一行简单的 javascript 可以通过分配一个简单返回的 onclick 处理程序来禁用适当的链接假的。
例子:
<script type="text/javascript">
$('#HomeLink').click(function(e) {
e.preventDefault();
return false;
});
</script>
无论如何,IMO 都应该在视图中保持对 UI 元素的控制。