Невозможно отобразить необработанный HTML в компоненте Razor - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть следующий компонент Razor (сервер Blazor?) В проекте страниц бритв ASP.Core 3.0 (обычный):

@using WEKA.Models
@using Microsoft.AspNetCore.Html

<div class="jobs-list">
    @foreach (var e in News)
    {
        <div class="job" data-aos="fade-up">
            <a href="@e.Link">
                <div class="col name">@e.Text)</div>
                <div class="col more">Detail</div>
            </a>
        </div>
    }
</div>

@code {

    public List<QNewsList> News
    {
        set { }
        get
        {
            using (WEKAContext db = new WEKAContext())
            {
                var q = from n in db.Qaktuality select new QNewsList() { Datum = n.Datum.ToString("d.M.YYYY"), Text = new HtmlString(n.Text), Link = n.RssLink };
                return q.ToList();
            }
        }
    }

    public class QNewsList
    {
        public string Datum;
        public HtmlString Text;
        public string Link;
    }
}

Компонент отображается на обычной странице бритвы cshtml:

@(await Html.RenderComponentAsync<WEKA.Components.NewsList>(RenderMode.Static))

Я пытаюсь сделать так, чтобы поле базы данных Text отображалось на веб-странице в виде необработанного HTML (то есть, отображая &nbsp; как пробел).Объект Html здесь недоступен для вызова Html.Raw.Этот код выше не отображает необработанный HTML из базы данных.Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

См. Документ здесь и из того, что сказал @Hrnk, вам нужно использовать MarkupString вместо HtmlString в компоненте бритвы. Измените код ниже

@using WEKA.Models
@using Microsoft.AspNetCore.Html

<div class="jobs-list">
    @foreach (var e in News)
    {
        <div class="job" data-aos="fade-up">
            <a href="@e.Link">
                <div class="col name">@e.Text</div>
                <div class="col more">Detail</div>
            </a>
        </div>
    }
</div>

@code {

    public List<QNewsList> News
    {
        set { }
        get
        {
            using (WEKAContext db = new WEKAContext())
            {
                var q = from n in db.Qaktuality select new QNewsList() { Datum = n.Datum.ToString("d.M.YYYY"), Text = new MarkupString(n.Text), Link = n.RssLink };
                return q.ToList();
            }
        }
    }

    public class QNewsList
    {
        public string Datum;
        public MarkupString Text;
        public string Link;
    }
}

См. https://github.com/aspnet/Blazor/issues/167

https://github.com/aspnet/AspNetCore/issues/12615

1 голос
/ 26 сентября 2019

Должно работать, когда вы используете это:

<div class="col name">@((MarkupString)e.Text)</div>
...