Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何在使用TagHelpers(Asp.Net.MVC6 6.0.0-rc1.0-final)中突出显示导航栏菜单项_Asp.net Core_Asp.net Core Mvc_Tag Helpers - Fatal编程技术网

Asp.net core 如何在使用TagHelpers(Asp.Net.MVC6 6.0.0-rc1.0-final)中突出显示导航栏菜单项

Asp.net core 如何在使用TagHelpers(Asp.Net.MVC6 6.0.0-rc1.0-final)中突出显示导航栏菜单项,asp.net-core,asp.net-core-mvc,tag-helpers,Asp.net Core,Asp.net Core Mvc,Tag Helpers,我想在asp.net 5 1.0.0-rc1-final中的菜单链接中生成class=“active”,以突出显示\u Layout.cshtml中导航栏的活动菜单。 这里提出的解决方案:在Asp.Net.MVC 6.0.0 beta5中运行良好。 但是,在6.0.0 rc1(asp.net 1.0.0 rc-1最终版)中,似乎不可能使用[ViewContext]装饰,因为此属性不存在。 有办法解决这个问题吗 1) 以下是对rc-1稍作修改的代码。 除了被拒绝的[ViewContext]之外,其

我想在asp.net 5 1.0.0-rc1-final中的菜单链接中生成class=“active”,以突出显示\u Layout.cshtml中导航栏的活动菜单。
这里提出的解决方案:在Asp.Net.MVC 6.0.0 beta5中运行良好。 但是,在6.0.0 rc1(asp.net 1.0.0 rc-1最终版)中,似乎不可能使用[ViewContext]装饰,因为此属性不存在。
有办法解决这个问题吗

1) 以下是对rc-1稍作修改的代码。
除了被拒绝的[ViewContext]之外,其他一切都正常。如果没有此属性,viewContext在运行时将为null)。
2) 要运行它,您应该创建一个asp.net5 WebApplicationX,并在_ViewImports.cshtml中添加
@addTagHelper“WebApplicationX.TagHelpers.MenuLinkTagHelper,WebApplicationX”

然后只需使用
而不是常规的mvc
主锚定

using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Microsoft.AspNet.Razor.TagHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WebApplicationX.TagHelpers
{
    [HtmlTargetElement("menulink", Attributes = "controller-name, action-name, menu-text")]
    public class MenuLinkTagHelper : TagHelper 
    {
        public string ControllerName { get; set; }
        public string ActionName { get; set; }
        public string MenuText { get; set; }
        [ViewContext]                         //*** This is not allowed.***
        public ViewContext ViewContext { get; set; }

        public IUrlHelper _UrlHelper { get; set; }

        public MenuLinkTagHelper(IUrlHelper urlHelper)
        {
            _UrlHelper = urlHelper;
        }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            StringBuilder sb = new StringBuilder();

            string menuUrl = _UrlHelper.Action(ActionName, ControllerName);

            output.TagName = "li";

            var a = new TagBuilder("a");
            a.MergeAttribute("href", $"{menuUrl}");
            a.MergeAttribute("title", MenuText);
            a.InnerHtml.Append(MenuText);

            var routeData = ViewContext.RouteData.Values;
            var currentController = routeData["controller"];
            var currentAction = routeData["action"];

            if (String.Equals(ActionName, currentAction as string, StringComparison.OrdinalIgnoreCase)
                && String.Equals(ControllerName, currentController as string, StringComparison.OrdinalIgnoreCase))
            {
                output.Attributes.Add("class", "active");
            }

            output.Content.SetContent(a.ToString());
        }
    }
}

ViewContext属性仍然存在。它在Microsoft.AspNet.Mvc.ViewFeatures中,而不是在Microsoft.AspNet.Mvc.Rendering(ViewContext类本身所在的位置)中。一定要选对一个。您可以在这里查看一个示例:

ViewContext属性仍然存在。它在Microsoft.AspNet.Mvc.ViewFeatures中,而不是在Microsoft.AspNet.Mvc.Rendering(ViewContext类本身所在的位置)中。一定要选对一个。您可以在这里查看一个示例:

感谢Danny的帮助,在重新查看原始版本后,您可以在下面找到1.0.0-rc1-final的工作代码

    using Microsoft.AspNet.Mvc;
    using Microsoft.AspNet.Mvc.Rendering;
    using Microsoft.AspNet.Mvc.ViewFeatures;                    //change for 1.0.0-rc1.0-final
    using Microsoft.AspNet.Razor.TagHelpers;
    using System;
    using System.Text;

namespace WebAppName.TagHelpers
{
    [HtmlTargetElement("menulink", Attributes = "controller-name, action-name, menu-text")]
    public class MenuLinkTagHelper : TagHelper
    {
        public string ControllerName { get; set; }
        public string ActionName { get; set; }
        public string MenuText { get; set; }
        [ViewContext]
        public ViewContext ViewContext { get; set; }

        public IUrlHelper _UrlHelper { get; set; }

        public MenuLinkTagHelper(IUrlHelper urlHelper)
        {
            _UrlHelper = urlHelper;
        }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            StringBuilder sb = new StringBuilder();

            string menuUrl = _UrlHelper.Action(ActionName, ControllerName);

            output.TagName = "li";

            var a = new TagBuilder("a");
            a.MergeAttribute("href", $"{menuUrl}");
            a.MergeAttribute("title", MenuText);
            a.InnerHtml.Append(MenuText);                    //change for 1.0.0-rc1.0-final

            var routeData = ViewContext.RouteData.Values;
            var currentController = routeData["controller"];
            var currentAction = routeData["action"];

            if (String.Equals(ActionName, currentAction as string, StringComparison.OrdinalIgnoreCase)
                && String.Equals(ControllerName, currentController as string, StringComparison.OrdinalIgnoreCase))
            {
                output.Attributes.Add("class", "active");
            }
            output.Content.Append(a);                    //change for 1.0.0-rc1.0-final
        }
    }
}

多亏了Danny的帮助,在重温原始版本之后,您可以在下面找到1.0.0-rc1-final的工作代码

    using Microsoft.AspNet.Mvc;
    using Microsoft.AspNet.Mvc.Rendering;
    using Microsoft.AspNet.Mvc.ViewFeatures;                    //change for 1.0.0-rc1.0-final
    using Microsoft.AspNet.Razor.TagHelpers;
    using System;
    using System.Text;

namespace WebAppName.TagHelpers
{
    [HtmlTargetElement("menulink", Attributes = "controller-name, action-name, menu-text")]
    public class MenuLinkTagHelper : TagHelper
    {
        public string ControllerName { get; set; }
        public string ActionName { get; set; }
        public string MenuText { get; set; }
        [ViewContext]
        public ViewContext ViewContext { get; set; }

        public IUrlHelper _UrlHelper { get; set; }

        public MenuLinkTagHelper(IUrlHelper urlHelper)
        {
            _UrlHelper = urlHelper;
        }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            StringBuilder sb = new StringBuilder();

            string menuUrl = _UrlHelper.Action(ActionName, ControllerName);

            output.TagName = "li";

            var a = new TagBuilder("a");
            a.MergeAttribute("href", $"{menuUrl}");
            a.MergeAttribute("title", MenuText);
            a.InnerHtml.Append(MenuText);                    //change for 1.0.0-rc1.0-final

            var routeData = ViewContext.RouteData.Values;
            var currentController = routeData["controller"];
            var currentAction = routeData["action"];

            if (String.Equals(ActionName, currentAction as string, StringComparison.OrdinalIgnoreCase)
                && String.Equals(ControllerName, currentController as string, StringComparison.OrdinalIgnoreCase))
            {
                output.Attributes.Add("class", "active");
            }
            output.Content.Append(a);                    //change for 1.0.0-rc1.0-final
        }
    }
}

谢谢,确实有帮助。但是由于某种原因,我从.ToString()的输出中得到的是Microsoft.AspNet.Mvc.Rendering.TagBuilder,而不是实际的锚。我需要与原作作进一步比较,看看原因。我会在解决它后更新。谢谢,确实很有帮助。但是由于某种原因,我从.ToString()的输出中得到的是Microsoft.AspNet.Mvc.Rendering.TagBuilder,而不是实际的锚。我需要与原作作进一步比较,看看原因。我将在解决它后进行更新。