启用/禁用MVC项目中的链接

时间:2014-02-03 08:13:59

标签: c# javascript asp.net-mvc linq razor

我知道有很多关于这个主题的帖子,但没有一个解释我想做什么。我正在开发一个包含一百多个模型,视图和控制器的大型MVC项目。

主菜单项存储在数据库中,其中包含url,其余链接只是硬编码href。

当项目运行并且您登录时,它会显示一个带有女巫左侧下拉菜单的仪表板,您必须选择一个与您将要工作的女巫的复合体。默认情况下,没有选择复杂。我想禁用所有链接,除了你要添加新复合体的链接,当你选择一个复合体时,它必须再次启用它们。任何人都可以指出我正确的方向

4 个答案:

答案 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的事实,您需要在控制器操作中进行一些检查,看看他们是否已经选择了复合体。如果没有,那么将它们重定向到适当的页面通知他们。