在自定义 ActionLink Helper MVC 中使用条件 HTML 属性

Using Conditional HTML Attributes in Custom ActionLink Helper MVC

我正在使用自定义 HTML 操作 link 帮助器,想知道是否可以在操作 link 帮助器的文本部分实现条件属性函数。我定义了一个 CSS class 来格式化列表的 li 元素。当我在 Helper 的文本部分静态定义它时,它会起作用。

不过,我想要的是这样的

@Html.MyActionLink("<li>Foo\@IsCurrentPage("Page1")\</li>",...

是否可以通过这种方式插入函数IsCurrentPage。我已经尝试使用助手的 HTML 属性,但它似乎适用于我只想设置

  • 样式的情况。我是否应该重新专注于处理 helpers HTML 属性。还是使用函数的方式来做到这一点?

    这是相关代码。

    帮手:

     public static IHtmlString MyActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string action,
        string controller,
        object routeValues,
        object htmlAttributes
    )
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            var anchor = new TagBuilder("a");
            anchor.InnerHtml = linkText;
            anchor.Attributes["href"] = urlHelper.Action(action, controller, routeValues);
            anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));
            return MvcHtmlString.Create(anchor.ToString());
        }
    
    
        }
    

    助手实现:

    @Html.MyActionLink(
                    "<li>Foo</li>",
                    "MyAction",
                    "MyController",
                    null,
                    null
                    )
    

    条件属性函数:

    @functions {
    public static string CurrentPage(string page)
    {
        return HttpContext.Current.Request.Url.ToString().Contains(page) ? "active-tab" : null;
    }
    

    }

  • 由于 HTML MyActionLink 帮助程序将传入的文本定义为字符串,因此我只处理字符串。可以通过在要连接的项目之间使用“+”号将字符串连接在一起。我用来确定在 li 标记中使用哪个 class 的函数是在 Razor 表示法中定义的,可以在我创建的字符串的两个部分之间注入。