【问题标题】:How to dynamically alter the class of an Html.ActionLink in MVC如何在 MVC 中动态更改 Html.ActionLink 的类
【发布时间】:2010-10-31 10:05:57
【问题描述】:

我正在寻找一种方法来根据特定标准更改控制器中 ActionLink 的类(在模型中未找到,因此我无法在视图本身中编写条件)。但我似乎找不到允许我使用此元素工作的 ViewData("name")(我认为这是可能的,但我遗漏了一些东西)。

在我看来,我有一个这样的 html 助手

<%=Html.ActionLink("View", "Index", "Home")%>

但在我的控制器中,我不确定如何引用它,如下所示添加类或 onclick 等属性。

ViewData("View").attributes.add("class", "active")

【问题讨论】:

    标签: css asp.net-mvc dynamic html-helper actionlink


    【解决方案1】:

    您不要从控制器设置 CSS 属性,因为这是视图的问题。您可以像这样向 ActionLink 添加 HTML 属性:

     <%=Html.ActionLink("View Cases", "Index", "Home", new { @class="active" })%>
    

    您也可以“手动”构建锚点:

     <a href="<%=Url.Action("Index", "Home")%>" class="active">View Cases</a>
    

    或者如果需要有条件地设置活动类:

     <% var activeClass = someCondition ? "active" : ""; %>
     <a href="<%=Url.Action("Index", "Home")%>" class="<%=activeClass%>">View Cases</a>
    

    【讨论】:

    • 同意,但如果我需要根据用户凭据显示/隐藏菜单选项(网络表单转换为 MVC) - 我如何在 MVC 中执行此操作?
    • 基于凭据显示/隐藏,要么用 if 块包围,要么编写 HtmlHelper 扩展方法来封装逻辑。如果用户已通过身份验证,您可以从控制器传递一个值,然后在视图中检查该值。
    • 感谢您帮助我进行范式转变!我喜欢它提供的干净分离!
    【解决方案2】:

    Razor 视图中,您可以执行以下操作:

    @model AssessmentQuestionViewModel
    
    @{var newClass = Model.AnswerValue == 0 ? "not-answered" : string.Empty;}
    
    <a href="@Url.Action("Index", "Home")" class="wizard-step @newClass">View Question</a>
    

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2014-11-15
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多