Jquery 在Razor局部视图中解码HTML内容

Jquery 在Razor局部视图中解码HTML内容,jquery,asp.net-mvc,asp.net-mvc-4,razor,Jquery,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个ASP.NET MVC应用程序,它利用以下局部视图显示用户输入的注释: @model NoteViewModel <div title="@Model.Content"><span class="accordion-header">@Model.HeaderText</span></div> <div> @using (Ajax.BeginForm("SaveNote", "Note", null, new AjaxO

我有一个ASP.NET MVC应用程序,它利用以下局部视图显示用户输入的注释:

@model NoteViewModel

<div title="@Model.Content"><span class="accordion-header">@Model.HeaderText</span></div>
<div>
    @using (Ajax.BeginForm("SaveNote", "Note", null, new AjaxOptions() { OnSuccess = "SaveNoteCallback(data, status, xhr)" }, new { id = ("Note" + Model.NoteId + "_form") }))
    {
        @Html.HiddenFor(model => model.AuditId)
        @Html.HiddenFor(model => model.NoteId)
        @Html.HiddenFor(model => model.NoteTypeId)
        @Html.TextAreaFor(model => model.Content, new { @class = "rteditor" })

        <div class="note-buttons">
            <input class="note-button note-submit" type="submit" value="Save" />
            @Html.ActionLink("Delete", "Delete", "Note", new { id = Model.NoteId }, new { @class = "note-button note-delete" })
        </div>
    }
</div>
如您所见,我首先直接使用
Content
属性在第一个
div
元素上设置title属性——在那里,内容被正确编码为
pExample/p
。我还在
TextAreaFor
html助手的
Content
属性中再次使用。在这种情况下,视图将文本区域内的内容双重编码为
&;书信电报;宝洁;燃气轮机;举例及;lt/宝洁;燃气轮机。这是我在javascript回调中得到的原始结果——它不是我在脚本中执行的任何操作的结果

以下是在此场景中返回部分视图的控制器操作:

[HttpPost]
public PartialViewResult SaveNote(NoteViewModel viewModel)
{
    Note note;
    if (viewModel.NoteId == 0)
    {
        note = Db.Notes.Create();
        Db.Notes.Add(note);
    }
    else
    {
        note = Db.Notes.Find(viewModel.NoteId);
    }

    Mapper.Map<NoteViewModel, Note>(viewModel, note);

    Db.SaveChanges();

    Mapper.Map<Note, NoteViewModel>(note, viewModel);

    return PartialView("~/Views/Shared/NoteView.cshtml", viewModel);
}
我想知道最干净的处理方法是什么。是否可以让部分视图返回未编码的HTML内容?从客户端回调函数对其进行解码是否是最好的方法(这将如何实现)


编辑2:在进行了一些调试之后,在我看来,当通过控制器的
PartialView
方法呈现视图时,html内容似乎被
TextAreaFor
和/或
TextArea
html帮助程序双重编码(与在另一个视图中通过
Html.Partial
进行渲染相反)。

问题的根源在于我的控制器正在解码模型的
内容
属性(通过automapper)在呈现部分视图之前,这是避免双重编码所必需的。但是,我没有考虑的是,<代码>模型状态字典仍然包含代码< >内容< /COD>属性的编码版本,因此在视图呈现期间HTML帮助器仍在使用。


解决方案是在返回部分视图之前调用
ModelState.Clear()

请发布一个js代码,负责“通过JQuery进行渲染的AJAX回调”。实际上,无论哪种方式,代码都应该是相同的。Razor始终返回HTML编码的字符串,除非另有指示(
HTML.Raw
)。最有可能的问题是,通过您在AJAX中使用的JavaScript,内容得到了双重HTML编码。@Andrei Schenider补充道
[HttpPost]
public PartialViewResult SaveNote(NoteViewModel viewModel)
{
    Note note;
    if (viewModel.NoteId == 0)
    {
        note = Db.Notes.Create();
        Db.Notes.Add(note);
    }
    else
    {
        note = Db.Notes.Find(viewModel.NoteId);
    }

    Mapper.Map<NoteViewModel, Note>(viewModel, note);

    Db.SaveChanges();

    Mapper.Map<Note, NoteViewModel>(note, viewModel);

    return PartialView("~/Views/Shared/NoteView.cshtml", viewModel);
}
function SaveNoteCallback(data, status, xhr) {
    var notesContainer = $("#accordion-container");
    var html = $(data);
    html.appendTo(notesContainer);
    notesContainer.accordion("refresh");
    var contentArea = $(".rteditor", html)[0];
    CKEDITOR.replace(contentArea, {
        width: '100%',
        resize_enabled: false,
        htmlEncodeOutput: true
    });
    $(".note-button", html).button();
    $(".note-buttons", html).show();
}