Почему я не могу HtmlDecode в ASP.NET MVC 3 - PullRequest
7 голосов
/ 01 марта 2011

Вот сценарий.Я хочу использовать CKEditor для расширенного текстового поля в форме, но по какой-либо причине я не могу получить содержимое из текстовой области на сервер и вернуться на страницу без проблем с кодированием.Вот небольшой пример программы, которую я написал, чтобы попытаться выяснить, что происходит.Во-первых, моя модель просмотра:

HomeViewModel.cs

namespace CkEditorTest.Models
{
    public class HomeViewModel
    {
        [Required]
        [DataType(DataType.Html)]
        [Display(Name = "Note")]
        public string Note { get; set; }
    }
}

Теперь мой контроллер:

HomeController.cs

using System.Web.Mvc;
using CkEditorTest.Models;

namespace CkEditorTest.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new HomeViewModel());
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Index(HomeViewModel model)
        {
            return View(model);
        }
    }
}

И, наконец, мое мнение:

Index.cshtml

@model CkEditorTest.Models.HomeViewModel
@{
    ViewBag.Title = "CKEditor Test";
}
@section head
{
    <script type="text/javascript" src="@Url.Content("~/Scripts/ckeditor/ckeditor.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/ckeditor/adapters/jquery.js")"></script>

    <script type="text/javascript">
        $(document).ready(function () {
            $("#Note").ckeditor();
        });
    </script>
}

<h2>CKEditor Test</h2>

@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.Note)<br /><br />
    @Html.TextAreaFor(m => m.Note)<br />
    <input type="submit" />
}

@if (!String.IsNullOrEmpty(Model.Note))
{
<div id="noteText">@Model.Note</div>
}

Независимо от того, что я делаю, я не могу отобразить Model.Note свойство как HTML на мой взгляд.К тому времени, когда он достигает представления, он кодируется в формате HTML (т.е.

и т. Д.).Вот как выглядит форма до публикации:

до публикации http://www.matthewkimber.com/images/so/pre-post.png

И вот каков результат в div под кнопкой «Отправить»:

опубликовать результат http://www.matthewkimber.com/images/so/posted.png

Я установил точку останова в Visual Studio, и она отображается в виде пустых угловых скобок (без кодирования элементов HTML, только символы).

точка остановарезультаты http://www.matthewkimber.com/images/so/dataInsideTheActionMethod.png

Это, конечно, урезанный тест.Я попытался закодировать его, расшифровав как в представлении, так и в контроллере, но безрезультатно.

Ответы [ 3 ]

14 голосов
/ 01 марта 2011

По умолчанию все закодировано, когда вы используете бритву. Я думаю, что вы ищете Raw метод .

Также было бы неплохо проверить ответ, используя Fiddler или Firebug.

4 голосов
/ 01 ноября 2011

Попробуйте это:

@Html.DisplayTextFor(modelItem => item.Note)
2 голосов
/ 01 марта 2011

Вы также можете использовать HtmlString ("")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...