1

我试图在页面首次呈现时默认隐藏 HTML.ActionLink,然后根据用户所在的页面控制它的可见性。有什么建议么?谢谢!

4

7 回答 7

3

您可以通过设置其 html 属性在操作链接上设置任何样式。

Html.ActionLink(
    "LinkName", 
    "Action", 
    null,
    new { @style = "display:none" });
于 2009-11-05T17:06:50.880 回答
1

要决定隐藏或显示链接的天气,您需要通过 Model 或 ViewData 提供此信息。我想您在母版页中有链接。

因此,第一步是为您网站中的所有视图提供该信息。您可以通过创建基本控制器并覆盖一个方法来做到这一点(当然,您的所有控制器都应该从新控制器继承):

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (filterContext.ActionResult is ViewResult) {
        ViewData["Shared-ShowTheLink"] = IsLinkeVisible(filterContext) ? "non-null" : null;
    }       
}

private bool IsLinkeVisible(ActionExecutedContext filterContext) {
    // Show on the home page only, for example
    var controllerName = filterContext.RouteData.Values["controller"];
    var actionName = filterContext.RouteData.Values["action"];

    var isHome = string.Compare(controllerName, "Home", StringComparison.InvariantCultureIgnoreCase) == 0;
    var isIndex = string.Compare(actionName, "Index", StringComparison.InvariantCultureIgnoreCase) == 0;
    return isHome && isIndex;
}

之后,您需要到您的母版页(或视图)并执行以下操作(假设 WebForms 视图引擎):

<% if (ViewData["Shared-ShowTheLink"] != null) { %>
    Html.ActionLink("Link Text", "Action", "Controller");
<% } %>

现在您的链接应该只在主页/索引上可见。
要根据需要更改此修改 IsLinkeVisible 方法。

干杯。

于 2009-11-05T22:48:41.237 回答
0

默认情况下,使用 CSSdisplay:none属性呈现链接。然后使用 Javascript 切换display到将在需要时显示链接的值。更多信息在这里

jQuery 提供了 show() 和 hide()效果,允许您轻松切换一个或多个元素的可见性。

于 2009-11-05T17:05:19.527 回答
0

使用 htmlAttributes 重载创建您的操作链接帮助器,为其提供一个类

Html.ActionLink("link","link",null, new { @class=model.mystatus })

您可以从模型中的属性设置@class 值,然后应用“display:none;” 到 CSS 中的类或使用 jquery 将元素设置为隐藏 --> $('.statusclass').hide();

于 2009-11-05T17:08:28.490 回答
0

唯一有效的是将 ActionLink 包装在一个 span 中,分配一个类,将其隐藏在 CSS 中,并在 JavaScript 中显示它。由于某种原因,将类名直接分配给 ActionLink 是行不通的。

感谢大家的帮助!

于 2009-11-05T19:17:36.040 回答
0

我猜你想控制 Html.ActionLink 辅助方法生成的标签的可见性,对吗?如果是,您可以动态指定标签的类,如下所示:

<%=Html.ActionLink("link", "MyAction", null, new { @class = ViewData["actionLinkClass"] })%>

在您的控制器操作方法中,您可以定义ViewData["actionLinkClass"]可见或隐藏样式的值。

于 2009-11-05T17:13:25.183 回答
0

这里有一个技巧:

  • 向链接添加 CSS 类
  • 在每个页面的 body 标签中添加一个 CSS 类,根据需要使用尽可能多的唯一值
  • 编辑您的 CSS 文件以根据正文标记类和链接上的类的组合显示/隐藏链接。

示例 CSS 文件:

body.events .myLink,
body.about .myLink {
   display:none;
}
body.programs .myLink {
   display:inline;
}

然后你不需要对 ActionLink 做任何时髦的事情。这并没有解决您为什么要首先发出不想显示的链接的问题,但是我相信您有充分的理由。

于 2009-11-05T21:20:57.887 回答