Создать тег привязки, используя Razor Pages - PullRequest
0 голосов
/ 12 сентября 2018

Я знаком с примерами CRUD о том, как генерировать якорную ссылку, используя asp-page и asp-route-id.

Есть много таких примеров, но как мне создать тег привязки, который выглядит следующим образом и находится на обычной странице, которую посетит посетитель (а не администратор (CRUD)) - например, в списке -blog-сообщений-страница:

<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 голосов
/ 12 сентября 2018

Не совсем понятно, что вы ищете. Вы упоминаете Guid, но вы не включили его в сгенерированный URL. Я работаю в предположении, что вам нужно пройти Guid вместе с SEO-дружественным названием Что вы можете сделать, это создать Dictionary<string, string> и передать его атрибуту 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 используется для преобразования «My First Blog Title» и т. Д. В его 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.

...