Получить и установить HTML-формат с помощью tinyMCE в ASP.NET MVC 5 - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть проект на двух языках, и у меня есть история для каждого языка.Я хочу использовать TinyMCE для получения отформатированного HTML-текста, а также установить эти текстовые поля из базы данных.

Это моя модель для блогов:

Модель :

    [Required(ErrorMessage = "Please add the news context")]
    [MinLength(10, ErrorMessage = "The length of news context must be 10 characters atleast")]
    [Display(Name = "News Context")]
    [UIHint("tinymce_jguery_full"), AllowHtml]
    public string newsContent { get; set; }

    [Required(ErrorMessage = "شرح خبر نمی تواند خالی باشد")]
    [MinLength(10, ErrorMessage = "حداقل طول شرح خبر 10 حرف است")]
    [Display(Name = "شرح خبر")]
    [UIHint("tinymce_jguery_full"), AllowHtml]
    public string newsContentFa { get; set; }

Я также могу успешно извлечь этот блог с помощью метода service.Get_Category_List(), как показано в коде NewsmanagementControler

Контроллер :

 public ActionResult Edit(int id)
 {
        using (DbModel db = new DbModel())
        {
            News SelectedNews = new News();
            var news = service.GetNews_ById(id);
            return View(news);
        }
 }

И, наконец,в представлении я установил tinyMCE из необработанного HTML, извлеченного из базы данных, как следующий код:

Представление

<script src='//cdn.tinymce.com/4/tinymce.min.js'></script>
<script type="text/javascript">
    tinymce.init({
        selector: 'textarea',
        mode: "textareas",
        theme: 'modern',
        entity_encoding: 'raw',
        height: 300,
        plugins: [
            'advlist autolink link lists charmap print preview hr anchor pagebreak spellchecker',
            'searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime nonbreaking',
            'save table colorpicker contextmenu directionality paste textcolor image'
        ],
        content_css: '../../Content/css/tinyMCE.css',
        toolbar: 'insertfile undo redo | styleselect | fontselect | sizeselect | fontsizeselect bold italic underline | alignleft aligncenter alignright alignjustify | ltr rtl | bullist numlist outdent indent | link | print preview fullpage | forecolor backcolor image',
        fontsize_formats: "8pt 10pt 12pt 14pt 16pt 18pt 20pt 24pt 36pt",
        font_formats: "Arial=arial,helvetica,sans-serif;" +
            "Arial Black=arial black,avant garde;" +
            "B Yekan=BYekan" +
            "Courier New=courier_newregular,courier;" +
            "Impact=impactregular,chicago;" +
            "Tahoma=tahoma,arial,helvetica,sans-serif;" +
            "Times New Roman=times new roman,times;" +
            "Verdana=verdana,geneva;" +
            "Webdings=webdings;" +
            "Wingdings=wingdings,zapf dingbats",
        draggable_modal: true
    });
</script>
@using (Html.BeginForm("Edit", "NewsManagement", FormMethod.Post))
{
        <div class="col-md-12 ltr">
            <br />
            <label for="MainContent">Context of Blog</label>
            @Html.TextAreaFor(m => m.news.newsContent, new { @class = "fullWidth tiny", placeholder = "Main Content" })
            @Html.ValidationMessageFor(m => m.news.newsContent, "", new { @class = "redError" })<br />
            <br />
        </div>
        <div class="col-md-12 rtl">
            <br />
            <label for="MainContentFa">شرح مطلب</label>
            @Html.TextAreaFor(m => m.news.newsContentFa, new { @class = "fullWidth tiny rtl", placeholder = "شرح مطلب" })
            @Html.ValidationMessageFor(m => m.news.newsContentFa, "", new { @class = "redError" })<br />
        </div>
}

У меня нет проблем с сохранением необработанного HTMLtinyMCE, но для отображения моего сохраненного необработанного HTML в базе данных есть проблема - как показано на этом скриншоте:

enter image description here

Как вы можете видеть необработанный HTMLне рендерится в TinyMCE.Я ищу везде на Google и здесь тоже, но нет никакого правильного ответа в соответствии с моей проблемой.

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

По умолчанию в MVC все html-входы htmlencoded по соображениям безопасности, поэтому, если вы хотите использовать html-разметку в качестве входных данных для вашего элемента управления вводом, вы можете html-кодировать его в своем представлении, прежде чем связывать его с вашим html-помощником, как это

    @{
      Model.news.newsContent= HttpUtility.HtmlDecode(Model.news.newsContent);
     } 

, а затем используйте его с вашим htmlHelper

      @Html.TextAreaFor(m => m.news.newsContent, new { @class = "fullWidth tiny", placeholder = "Main Content" })

эта ссылка может вам помочь Как использовать @ Html.Raw () в @ Html.TextAreaFor ()

0 голосов
/ 01 октября 2019

Если вы видите HTML-теги в HTML в TinyMCE, некоторая часть вашего приложения, вероятно, экранирует HTML для «безопасности».Большинство современных сред делают это по умолчанию, но все они имеют способ обойти эту меру безопасности при необходимости.

Если вы посмотрите на данные, которые вы передаете в TinyMCE, если вы увидите что-то вроде:

&lt;p&gt;I have escaped tags&lt;/p&gt; 

... в отличие от ...

<p>I have escaped tags</p>

... тогда что-то в вашем приложении ускользает от HTML, и вам просто не нужно выходить из HTML, чтобы решить эту проблему при повторной загрузке данных в TinyMCE.

...