首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有asp-controller和asp-action属性的锚点不会呈现为链接

具有asp-controller和asp-action属性的锚点不会呈现为链接
EN

Stack Overflow用户
提问于 2016-02-23 21:16:22
回答 2查看 12K关注 0票数 3

在此Razor语法中:

代码语言:javascript
复制
<a asp-controller="Home" asp-action="Index">Home</a>

@foreach (LinkNodeModel link in Model.ControlActions)
{
    link.LinkTree();
}

"Home“链接呈现得很好,但是手动呈现的<a>字符串不会转换为有效的链接。

LinkTree()的实现方式如下:

代码语言:javascript
复制
return $"<a asp-controller=\"{Controller}\" asp-action=\"{Action}\">{Name}</a>";

当我使用@link.LinkTree()打印链接时,输出包含一行仅显示的代码,但没有链接。

使用@Html.Raw(link.LinkTree())我得到了链接,但它们是不可点击的,因为它们实际上将asp-controller/asp-action属性打印到生成href的HTMLinstead。

有可能动态生成和呈现这样的链接吗?如果是这样,又是如何做到的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 21:37:06

Razor引擎不会处理从方法返回的HTML代码或实际任何文本,因此您不能在此处使用HTML标记帮助器。

但是,您可以调用“经典的”HtmlHelper.ActionLink方法(或更有用的extension methods之一)来为控制器操作返回正确呈现的a标记。因为它只是一个普通的方法,你可以在你自己的方法中调用它。

例如,您可以将IHtmlHelper对象传入您的方法:

代码语言:javascript
复制
@foreach (LinkNodeModel link in Model.ControlActions)
{
    link.LinkTree(@Html);
}

然后在您的方法中,只需使用ActionLink重载来创建链接:

代码语言:javascript
复制
public IHtmlContent LinkTree(IHtmlHelper helper)
{
    return helper.ActionLink(Name, Action, Controller);
}

或者,您也可以在对象上公开这三个属性,并使用Razor正确编写链接:

代码语言:javascript
复制
@foreach (LinkNodeModel link in Model.ControlActions)
{
    <a asp-controller="@link.Controller" asp-action="@link.Action">@link.Name</a>
}
票数 4
EN

Stack Overflow用户

发布于 2016-02-23 21:25:44

<a asp-controller="$controller" asp-action="$action">转换为<a href="/$controller/$action">的标记助手按照Introducing TagHelpers in ASP.NET MVC 6中的描述进行了选择,因此您需要配置您的应用程序才能使用它们:

最好将此文件放在_ViewImports.cshtml文件中,这是ASP.NET 5中引入的新Razor文件:

@addTagHelper "*,Microsoft.AspNet.Mvc.TagHelpers"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35578626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档