我试图在页面首次呈现时默认隐藏 HTML.ActionLink,然后根据用户所在的页面控制它的可见性。有什么建议么?谢谢!
7 回答
您可以通过设置其 html 属性在操作链接上设置任何样式。
Html.ActionLink(
"LinkName",
"Action",
null,
new { @style = "display:none" });
要决定隐藏或显示链接的天气,您需要通过 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 方法。
干杯。
使用 htmlAttributes 重载创建您的操作链接帮助器,为其提供一个类
Html.ActionLink("link","link",null, new { @class=model.mystatus })
您可以从模型中的属性设置@class 值,然后应用“display:none;” 到 CSS 中的类或使用 jquery 将元素设置为隐藏 --> $('.statusclass').hide();
唯一有效的是将 ActionLink 包装在一个 span 中,分配一个类,将其隐藏在 CSS 中,并在 JavaScript 中显示它。由于某种原因,将类名直接分配给 ActionLink 是行不通的。
感谢大家的帮助!
我猜你想控制 Html.ActionLink 辅助方法生成的标签的可见性,对吗?如果是,您可以动态指定标签的类,如下所示:
<%=Html.ActionLink("link", "MyAction", null, new { @class = ViewData["actionLinkClass"] })%>
在您的控制器操作方法中,您可以定义ViewData["actionLinkClass"]
可见或隐藏样式的值。
这里有一个技巧:
- 向链接添加 CSS 类
- 在每个页面的 body 标签中添加一个 CSS 类,根据需要使用尽可能多的唯一值
- 编辑您的 CSS 文件以根据正文标记类和链接上的类的组合显示/隐藏链接。
示例 CSS 文件:
body.events .myLink,
body.about .myLink {
display:none;
}
body.programs .myLink {
display:inline;
}
然后你不需要对 ActionLink 做任何时髦的事情。这并没有解决您为什么要首先发出不想显示的链接的问题,但是我相信您有充分的理由。