【问题标题】:MVC3 How to disable/enable ActionLinkMVC3 如何禁用/启用 ActionLink
【发布时间】:2012-04-08 11:08:37
【问题描述】:

我有 if 条件,我想禁用或启用我的 actionLink 按钮。

我该怎么做?

@Html.ActionLink("Delete", "Delete", new { id = @Model.Id})

谢谢,

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    如果您在服务器端知道该链接不可用,则只需呈现该操作不可用的消息:

    @if(condition)
    {
       @Html.ActionLink("Delete", "Delete", new { id = @Model.Id})
    }
    else
    {
       <text>Action is not available</text>
    }
    

    否则您只能使用

    禁用链接

    要使其跨浏览器工作:Should the HTML Anchor Tag Honor the Disabled Attribute?

    【讨论】:

      【解决方案2】:

      要禁用“a”标签,您可以这样做:

      @Html.ActionLink("Delete", "Delete", new { id = @Model.Id}, new { onclick = "javascript:return false;" })
      

      或者你可以使用 JQuery:

      @Html.ActionLink("Delete", "Delete", new { id = @Model.Id}, new { class = "linkdisabled" })
      

      CSS:

      .linkdisabled{
         cursor:text;
      }
      

      JQuery:

      $function(){
          $(".linkdisabled").click(function(){
              return false;
          }
      }
      

      【讨论】:

      • 嗨,不错的解决方案.. 但是有什么方法可以使文本无法点击。现在它显示为一个链接,但它不会去任何地方。那么有什么办法可以改变它的外观。谢谢
      • 您可以添加样式属性或使用 css 类来做到这一点:
      【解决方案3】:

      也许您可以创建自己的 MvcHtmlString 类型的 UI

      public static MvcHtmlString MyActionLink(this HtmlHelper helper, bool isClickable, string altText, RouteValueDictionary routeValues, object htmlAttributes = null) 
      {
          // some logic with isClickale parameter here
          if(isClickable == false)
          {}
      
          return new MvcHtmlString(helper.ToHtmlString());
      }
      

      并在您的视图中使用它

      @Html.MyActionLink( // some parameters here )
      

      但我从未尝试过。尝试在 Google 上查找有关 MvcHtmlString 的信息。

      【讨论】:

        【解决方案4】:

        聚会有点晚了,但万一其他人偶然发现这个...... 如果你的项目是自举的,你可以这样做:

        @Html.ActionLink("Delete", "Delete", new { id = @Model.Id}, new { @class = "btn btn-default disabled" })
        

        @{
            bool btnDisabled = // Logic here;
        }
        
        @Html.ActionLink("Delete", "Delete", new { id = @Model.Id}, new { @class = "btn btn-default " + @btnDisabled ? "disabled" : "" })
        

        【讨论】:

        • 向@class 添加真/假对我不起作用。我通过添加字符串“禁用”或在应该启用按钮时添加空字符串来测试它并且它工作正常。添加“禁用”后,这将是我的首选解决方案,我会赞成这个答案。
        • @Mariusz 我编辑了答案的第二部分,只是在写的时候没有完成这个想法。这就是你要找的东西吗?
        • 没错。感谢并支持您的回答:-)
        【解决方案5】:

        有人可能会觉得这很有用,我曾经通过将 @Html.ActionLink 转换为输入 &lt;input type="submit" id = "submit" /&gt; 解决了类似的问题 然后使用 javascript 将其作为链接工作:

        <script>
            $(document).ready(function () {
                $('#submit').click(function () {
                    if(condition){
                       //sth (not working as a link)
                    }
                    else
                    {
                        window.location.href = "/home/thanks"; //working as a link
                    }
                })
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多