MVC визуализирует PartialViewResult в строку

Отказ от ответственности: я отредактировал вопрос, потому что изменил процесс, но это ничего не меняет в проблеме...

Я пытаюсь получить PartialViewResult, отображаемый в строку, я пытался использовать метод RenderRazorViewToString из этого вопроса визуализировать представление в виде строки..., я получил подсказку из этого вопроса mvc возвращает частичное представление как json

Моя проблема в том, что строка выглядит так:

<$A$><h1>SomeHeader</h1> 
<table</$A$><$B$> class="table table-striped"</$B$><$C$>> <tbody</$C$><$D$> data-bind="template: { name: 'eventTemplate', foreach: events }"</$D$><$E$>></tbody>
</table></$E$>

вместо этого

<h1>SomeHeader</h1>
<table class="table table-striped">
    <tbody data-bind="template: { name: 'eventTemplate', foreach: events }"></tbody>
</table>

Обновление:
Процесс выглядит следующим образом:

public ActionResult Index(string item, long id)
{
    var cont = SomePartialView(item, id);
    return View(model: RenderRazorViewToString(cont));
}

теперь представление просто отображает строку следующим образом:

@Model

RenderRazorViewToString(PartialViewResult) возвращает эту "искаженную" строку...


person Nefarion    schedule 09.07.2013    source источник
comment
почему вам нужно вернуть свой частичный файл в формате json? пожалуйста, включите свой код использования (я предполагаю JQuery).   -  person Dave Alperovich    schedule 12.07.2013


Ответы (3)


Также возможно вернуть объект ContentResult / Content в результате вызванного действия.

Затем используйте возвращенные результаты в представлении.

Вот иллюстрация этого решения (требуется метод RenderViewToString):

Вид:

@Html.Action("GetHtmlAction")

PartialView (источник html-контента):

<h1>SomeHeader</h1>
<table class="table table-striped">
    <tbody data-bind="template: { name: 'eventTemplate', foreach: events }">
        <tr>
            <td>Fake Cell</td>
        </tr>
    </tbody>
</table>

Контроллер:

public ActionResult GetHtmlAction() {
    string htmlContent = RenderRazorViewToString("FakePartialView", null);
    return Content(htmlContent);
}

public string RenderRazorViewToString(string viewName, object model) {
    ViewData.Model = model;
    using (var sw = new StringWriter()) {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}
person Mikhail    schedule 18.07.2013

Это было подтверждено Microsoft.

Это ошибка в версии Asp.NET, которая поставляется с предварительной версией Visual Studio 2013. Это было исправлено в Visual Studio 2013 RC.

person makzr    schedule 17.09.2013

Как выглядит строка перед преобразованием в json? Есть ли в нем долларовые элементы? Что произойдет, если вы просто создадите строку с вашим предполагаемым выводом, например

"<h1>SomeHeader</h1><table class=\"table table-striped\"><tbody data-bind=\"template: { name:'eventTemplate', foreach: events }\"></tbody></table>"

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

person acarlon    schedule 12.07.2013
comment
Я обновил вопрос, и строка результата была захвачена до того, как она была Jsonified - person Nefarion; 12.07.2013