gpt4 book ai didi

asp.net-core-mvc - 在自定义 TagHelper 中使用 TagHelper

转载 作者:行者123 更新时间:2023-12-01 04:56:25 25 4
gpt4 key购买 nike

我正在编写一个简单的分页 TagHelper,我希望输出如下所示:

<ul>
<li><a href="...">Some Text</a></li>
<li><a href="...">Some Other Text</a></li>
...
</ul>

我的想法是,在定义我的类时,我会生成“a”元素,并用 asp-controller、asp-action 等属性装饰它们,这些属性将被呈现为正确的 href 链接。这是我想出的代码:
protected TagBuilder CreatePageLink( int page, bool enabled, string inner )
{
TagBuilder a = new TagBuilder( "a" );

a.MergeAttribute( "asp-controller", AspController );
a.MergeAttribute( "asp-action", AspAction );
a.MergeAttribute( "asp-route-page", page.ToString() );
a.MergeAttribute( "asp-route-itemsPerPage", ItemsPerPage.ToString() );

a.MergeAttribute( "title", $"goto page {page}" );

if( !enabled ) a.AddCssClass( "disabled" );
if( (page == Page) && String.IsNullOrEmpty(inner) ) a.AddCssClass( "active" );

if( String.IsNullOrEmpty( inner ) ) inner = page.ToString();
a.InnerHtml.AppendHtml( inner );

TagBuilder li = new TagBuilder( "li" );
li.InnerHtml.Append( a );

return li;
}

但它不起作用。像 asp-controller 这样的“MVC 魔法属性”出现在输出中,但生成的链接不起作用。我必须在代码中为嵌入的“a”元素添加一个特定的 href 属性才能使链接正常工作。

如何在我自己的自定义 TagHelper 中嵌套 TagHelper,如 LinkTagHelper?

最佳答案

这个关于标签助手的视频可能会有所帮助:https://channel9.msdn.com/Shows/Web+Camps+TV/Update-on-TagHelpers-with-Taylor-Mullen

向前跳到大约 35 分钟。

他们还将代码放在github上:https://github.com/NTaylorMullen/WebCampsTV_TagHelpers1

您会发现相关的部分是 here :

[OutputElementHint("ul")]
public class ControllerNavigationTagHelper : TagHelper
{
public ControllerNavigationTagHelper(IUrlHelper urlHelper)
{
UrlHelper = urlHelper;
}

private IUrlHelper UrlHelper { get; }

public Type ControllerType { get; set; }

public string Exclude { get; set; }

public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "ul";

var actionNames = ControllerType.GetTypeInfo().DeclaredMethods
.Where(methodInfo => methodInfo.IsPublic)
.Select(methodInfo => methodInfo.Name);

var controllerName = ControllerType.Name;

if (controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
{
controllerName = controllerName.Substring(0, controllerName.Length - "Controller".Length);
}

foreach (var name in actionNames)
{
if (!string.Equals(name, Exclude, StringComparison.OrdinalIgnoreCase))
{
var displayName =
string.Equals(name, "Index", StringComparison.OrdinalIgnoreCase) ? controllerName : name;
output.PostContent.Append($"<li><a href='{UrlHelper.Action(name, controllerName)}'>{displayName}</a></li>");
}
}
}
}

基本前提是有一个 IUrlHelper服务,我认为内置于 mvc(asp.net core mvc)中,可以注入(inject)到您的标签助手中,您可以使用它来构造引用。

一旦 IUrlHelper被注入(inject)你可以用它来构造url:

UrlHelper.Action(name, controllerName)

关于asp.net-core-mvc - 在自定义 TagHelper 中使用 TagHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com