我熟悉如何使用asp-page
和asp-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>
答案 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中生成值。