【问题标题】:Delayed rendering of content until end of layout page延迟呈现内容直到布局页面结束
【发布时间】:2015-08-28 00:19:48
【问题描述】:

在我们的应用程序中,我们有渲染 HTML 和生成 JS 的用户控件,这些 JS 应该在页面底部组合并输出。我完成 JS 部分的方式是通过在辅助方法中添加 ViewData 来生成控件。然后布局页面的底部在 body 的末尾渲染整个 JS 块。

查看:

@UserControlHelpers.RenderDataGrid(grid)

助手类:

/// <summary>
/// Renders a DataGrid user control using partial views rendered to strings
/// </summary>
/// <param name="grid"></param>
/// <returns></returns>
public IHtmlString RenderDataGrid(Models.UserControls.DataGrid grid)
{
    // Generate the JS for the control, storing it for later
    this.HtmlHelper.ViewData["dataGridJS"] += this.HtmlHelper.Partial("~/Views/UserControls/DataGridJS.cshtml", grid).ToString();

    // Immediately render the HTML for the grid
    return this.HtmlHelper.Raw(this.HtmlHelper.Partial("~/Views/UserControls/DataGridHTML.cshtml", grid).ToString());
}

布局:

<html>
<body>
@Html.Raw(UserControlHelpers.HtmlHelper.ViewData["dataGridJS"])
</body>
</html>

问题是当我们渲染包含网格的局部视图时。网格 JS 没有进入我正在输出的 ViewData 对象,而是 ViewData 的一个单独实例。当我们将网格放在主视图上时,它就可以正常工作了。

有没有更好的方法来做到这一点?

【问题讨论】:

标签: c# .net razor


【解决方案1】:

我在这篇文章中找到了解决方案:Rendering scripts from partial views at the end of the page in MVC (Razor)

有了这个,我可以使用类似于节块的东西,但它适用于部分视图和主视图。

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 2011-04-22
    • 2011-05-11
    • 2022-10-12
    • 2017-08-22
    • 2011-09-15
    • 2017-04-14
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多