使用Razor页面生成锚标记

时间:2018-09-12 13:19:25

标签: razor-pages

我熟悉如何使用asp-pageasp-route-id生成锚链接的CRUD示例。

有很多这样的示例,但是如何构造一个看起来像这样的锚标签,该锚标签位于访问者(而不是admin(CRUD))将要访问的常规页面上(例如,在列表中) -blog-posts-page:

<a href="/blog/my-first-blog-post">My first blog post</a>

<a href="/blog/my-second-blog-post">My first blog post</a>

我希望使用Razor语法,而不是通过串联字符串-像这样:

<a asp-page="blog/@{seoblogtitle}" asp-route-id="@model.id">@item.Title</a>

其中@{seoblogtitle}是路由模板,@model.id是GUID。

TL; DR;

如何在Razor页面中使用Razor构造类似于下面的锚链接?

<a href="/blog/my-first-blog-post">My first blog post</a>

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你在追求什么。您提到了Guid,但未在生成的URL中显示该Guid。我正在假设您需要通过Guid以及seo友好的标题。您可以做的是构造一个Dictionary<string, string>并将其传递给Anchor标签帮助器的asp-all-route-values属性。

您的博客页面具有以下模板:@page "{title}/{id}"

您的模型包含一个List<BlogTitle>属性(Links),其中BlogTitle类看起来像这样(至少):

public class BlogLink
{
    public string Title { get; set; }
    public Guid Id { get; set; } = Guid.NewGuid();
}

在内容页面中,您将执行以下操作:

@foreach(var link in Model.Links)
{
    var routeValues = new Dictionary<string, string>
    {
        { "title", SeoFriendly(link.Title) },
        { "id", link.Id.ToString() }
    };
    <a asp-page="blog" asp-all-route-data="routeValues">@link.Title</a><br />
}

SeoFriendly方法用于将“我的第一个博客标题”等转换为其seo友好版本。甚至可以在页面的@functions部分中进行定义:

@functions{
    public static string SeoFriendly(string s)
    {
        return s.Replace(" ", "-").ToLower(); // you need something more robust than this
    }
}

请参见此处的注释1:https://www.learnrazorpages.com/razor-pages/tag-helpers/anchor-tag-helper

注意:如果要将字典生成代码保留在内容页面之外,请向Dictionary<string, string>类添加BlogTitle属性,并在PageModel中生成值。