我知道有很多关于这个主题的帖子,但没有一个解释我想做什么。我正在开发一个包含一百多个模型,视图和控制器的大型MVC项目。
主菜单项存储在数据库中,其中包含url,其余链接只是硬编码href。
当项目运行并且您登录时,它会显示一个带有女巫左侧下拉菜单的仪表板,您必须选择一个与您将要工作的女巫的复合体。默认情况下,没有选择复杂。我想禁用所有链接,除了你要添加新复合体的链接,当你选择一个复合体时,它必须再次启用它们。任何人都可以指出我正确的方向
答案 0 :(得分:0)
您可以使用jQuery查找anchor
(链接)并禁用它。
禁用所有:
$(this).find('a').attr('disabled','disabled');
您可以使用each
语句迭代它们。
$.each('a', function()
{
if ($(this).attr('href') !== '/Complex/Add' && $(this).attr('href') !== '/Complex/Index') // your filter
{
$(this).attr('disabled','disabled');
}
});
您也可以阻止点击:
$('a').click(function(e)
{
e.preventDefault();
});
服务器端您可以在使用ActionLink时使用此功能,例如:
if (!checkLinkEnabled)
{
helper.ActionLink( "link text"
, actionName
, controller
, routeValues
, htmlAttributes: new Dictionary<string, object>
{ { "disabled", "disabled" }
}
);
}
答案 1 :(得分:0)
如果你对jQuery开放你可以尝试
$(document).on('click', 'a', function(event){
if(this.id !== 'YourDefaultElementID' && CheckForYourCondition == false){
event.preventDefault();
}
});
这里我有一个带有所有锚标记的绑定事件。使用event.preventDefault();
或return false;
来阻止默认操作
根据评论
我要禁用所有'a'元素,但带有'href ='的元素除外:#/Complex/Add
&amp; #/Complex/Index
。
$(document).on('click', 'a', function(event){
if($(this).attr('href') !== '#/Complex/Add'
&& $(this).attr('href') !== '#/Complex/Index'
&& CheckForYourCondition == false){
event.preventDefault();
}
});
答案 2 :(得分:0)
我不太了解MVC。 .But链接可以通过CSS隐藏;
您可以通过使用JavaScript或使用代码返回HtmlTextWriter
答案 3 :(得分:0)
如果您要禁止客户端访问特定页面不使用JavaScript(或任何其他客户端方式)。通过禁用客户端的某些内容,根据定义,它意味着它也可以在客户端重新启用。此外,任何数量的JavaScript或CSS都无法手动阻止某人只需在地址栏中输入页面的网址。
如果用户在拥有活动复合体之前无法访问“/ Complex / Edit”页面,则应在服务器端处理此问题。首先,在构建视图时,您的模型应该指示没有活动复合体,因此不要渲染任何需要活动复杂的链接。
其次,为了处理用户总是只需手动输入页面URL的事实,您需要在控制器操作中进行一些检查,看看他们是否已经选择了复合体。如果没有,那么将它们重定向到适当的页面通知他们。