Показать реальную гиперссылку при использовании asp tag helper - PullRequest
0 голосов
/ 27 мая 2019

когда я генерирую гиперссылку с помощниками asp-tag, она выглядит так:

<a asp-page="/demo">Demo</a>

Вывод html выглядит так:

<a href="/test/Demo">Demo</a>

Но я хочу показать пользователюне гиперссылка "Demo", а реальный адрес во время выполнения (localhost: xxxx / test / demo).

Проблема в том, что во время компиляции я этого не знал.Есть ли простой способ, которым функция asp-страницы генерирует мне содержимое гиперссылки?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Если я вас понимаю, вы хотите, чтобы фактическим содержанием ссылки был URL, а не строка "Demo".Если это так, вам нужно будет использовать UrlHelper:

<a asp-page="/demo">@Url.Page("/demo")</a>

, который вводит немного дублирования, поэтому я бы фактически предложил сделать что-то вроде:

@{ var demoUrl = Url.Page("/demo"); }
<a href="@demoUrl">@demoUrl</a>

Если вам нужен абсолютный URL, вам нужно передать параметр scheme:

Url.Page("/demo", null, null, PageContext.HttpContext.Request.Scheme)
0 голосов
/ 28 мая 2019

Для этого требования вам нужно реализовать собственный AnchorTagHelper с шагами ниже:

  1. Пользовательский AnchorTagHelper

    [HtmlTargetElement("a-link")]
    public class MyAnchorTagHelper : AnchorTagHelper
    {
        private readonly HttpContext _httpContext;
        public MyAnchorTagHelper(IHtmlGenerator generator
            , IHttpContextAccessor httpContextAccessor) : base(generator)
        {
            _httpContext = httpContextAccessor.HttpContext;
        }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            base.Process(context, output);
            output.TagName = "a";
            var basePath = $"{_httpContext.Request.Scheme}://{_httpContext.Request.Host}{_httpContext.Request.PathBase}";
            TagHelperAttribute href;
            if (output.Attributes.TryGetAttribute("href", out href))
            {
                output.Attributes.SetAttribute("href", $"{basePath}{href.Value}");
            }
        }
    }
    
  2. Регистрация MyAnchorTagHelper в _ViewImports.cshtml с @addTagHelper *, namespace

    @using Microsoft.AspNetCore.Identity
    @using TestRazor2_2
    @using TestRazor2_2.Data
    @namespace TestRazor2_2.Pages
    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    @addTagHelper *, TestRazor2_2    
    
  3. UseCase

    <a-link href="/test/Demo">Demo</a-link>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...