3

免责声明:我编辑了这个问题,因为我改变了流程,但它并没有改变任何问题......

我正在尝试PartialViewResult渲染为字符串,我尝试使用RenderRazorViewToString此问题中的方法将视图渲染为字符串...,我从这个 qustion mvc return partial view as 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)“残废”的字符串......

4

3 回答 3

7

It is also possible to return the ContentResult / Content object as a result of the invoked Action.

Then use the returned results within a View.

Here is an illustration of this solution (requires the RenderViewToString method):

View:

@Html.Action("GetHtmlAction")

PartialView (source for html content):

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

Controller:

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();
    }
}
于 2013-07-18T20:10:43.863 回答
2

微软已经证实了这一点。

这是 Visual Studio 2013 Preview 附带的 Asp.NET 版本中的一个错误。它已在 Visual Studio 2013 RC 中修复。

于 2013-09-17T12:40:41.160 回答
0

将字符串转换为 json 之前的字符串是什么样的?它有美元元素吗?如果你只是用你的预期输出创建一个字符串会发生什么,例如

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

转换为 json 时是否有美元符号?如果没有,那么视图中是否有任何可能导致美元元素的奇怪字符或行尾。

于 2013-07-12T00:30:09.873 回答