如何从部分视图将 JavaScript 渲染到 MasterLayout 部分?

2024-03-08

给定 MVC3 和 Razor 引擎,我得到

_MasterLayout.cshtml

@RenderSection("JavaScript", required: false)
..
..
@RenderBody()
..

查看.cshtml_MasterLayout.cshtml 在 _ViewStart.cshtml 中定义

..
@Html.RenderAction("PartialView", "PartialController")
..

PartialView.cshtml

..
@section JavaScript
{
........
}
..

如何确保部分视图中的 JavaScript 最终出现在主布局部分?

Edit

上述场景不起作用,因为分部视图没有定义主布局。另一方面,View 确实具有定义了 RenderSection 的 Layout。如果我将 JavaScript 部分从“部分视图”移动到“视图”,Razor 知道将其渲染到哪里。但是,由于分部视图没有布局,它不知道如何处理 JavaScript 部分,因此不会在任何地方呈现它。


我创建了一组扩展方法来将脚本块(或任何内容)从部分渲染到主布局中。

public static class ViewPageExtensions
{  
 private const string SCRIPTBLOCK_BUILDER = "ScriptBlockBuilder";

    public static MvcHtmlString ScriptBlock(
        this WebViewPage webPage,
        Func<dynamic, HelperResult> template)
    {
        if (!webPage.IsAjax)
        {
            var scriptBuilder = webPage.Context.Items[SCRIPTBLOCK_BUILDER] 
                                as StringBuilder ?? new StringBuilder();

            scriptBuilder.Append(template(null).ToHtmlString());

            webPage.Context.Items[SCRIPTBLOCK_BUILDER] = scriptBuilder;

            return new MvcHtmlString(string.Empty);
        }
        return new MvcHtmlString(template(null).ToHtmlString());
    }

    public static MvcHtmlString WriteScriptBlocks(this WebViewPage webPage)
    {
        var scriptBuilder = webPage.Context.Items[SCRIPTBLOCK_BUILDER] 
                            as StringBuilder ?? new StringBuilder();

        return new MvcHtmlString(scriptBuilder.ToString());
    }
}

然后就可以这样使用:

@this.ScriptBlock(
@<script  type='text/javascript'>
    $(document).ready(function () {
        notify('@message', '@Model.Type.ToString()',                    
               '@Model.Type.ToString().ToLower()');
    });
</script>)

然后在主布局中渲染:

@this.WriteScriptBlocks()

在这里查看完整的文章:Razor Partials 中内联脚本的脚本块模板化委托 http://blog.logrythmik.com/post/A-Script-Block-Templated-Delegate-for-Inline-Scripts-in-Razor-Partials.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从部分视图将 JavaScript 渲染到 MasterLayout 部分? 的相关文章

随机推荐

  • 仅允许接下来的 5 个工作日 jquery datepicker

    我有一个日期选择器 用于设置约会 唯一的问题是老板希望预约日期仅限于接下来的 5 个工作日 我知道如何禁用周末 但我有点不清楚如何做到这一点 以便如果我选择周三 它可以让我选择下周三之前的日期并考虑周末 有人对如何实现这一目标有任何想法吗
  • 无法使用完成处理程序进行抛出操作

    我正在尝试添加一个throws使用完成处理程序添加到我现有的函数 但我不断收到警告说no calls throwing functions occur within try expression 在我抛出错误的部分中 我收到一条错误消息 从
  • 使用 UIBezierPath 绘制圆角

    我有一个设计元素无法弄清楚 希望有人能够指出我正确的方向 我试图构建的元素是这样的 实际上 它是一个圆角矩形 在左侧 顶部和右侧都有描边 底部应该没有描边 我尝试过使用以下代码 Create the rounded rectangle le
  • 如何优化这个 GORM 查询

    我有一个查询 它进行 2 个数据库查询 我是 GORM 的新手 不知道如何使用条件 where 子句或其他内容将其优化为 1 个查询 我也使用 springsecurity 并有一个用于登录安全的 User 类 我有一个带有 User 对象
  • 在特定时间后台获取

    我正在寻找即使应用程序终止也能在后台模式下获取数据的解决方案 对于这个问题有很多教程和答案 但我的问题与其他问题不同 我在 stackoverflow 上没有找到任何合适的解决方案 所以发布了这个问题 我有一个可以解释的场景 我正在使用存储
  • Nhibernate:以相同的精度和小数位映射所有小数

    据我了解 在 NHibernate 中 使用代码映射 我可以指定小数属性的精度和小数位数 如下所示 Property x gt x Dollars m gt m Precision 9 m Scale 6 这很好 但我想知道是否有一种方法可
  • Clojure 的动态变量和绑定的实际用途是什么?

    我看了一下参考资料 http clojure org vars Vars 20and 20the 20Global 20Environment http clojure org vars Vars 20and 20the 20Global
  • 如何在 Ubuntu 16 中下载 Appium 桌面

    我正在尝试在 Ubuntu 16 中下载 Appium Desktop 到目前为止我只是使用终端来运行它 据我所知 对于 Ubuntu 我必须下载他们在 git 上的源代码版本 源代码 tar gz 而不是他们的 exe windows 或
  • 在C中使用枚举类型变量作为字符串的简单方法?

    这就是我想做的 typedef enum ONE TWO THREE Numbers 我正在尝试编写一个函数来执行类似于以下内容的 switch case char num str 10 int process numbers str Nu
  • 为具有抽象复杂类型的模式生成类

    我正在使用一些定义抽象复杂类型的模式 例如
  • 所需类型与找到类型相同

    我想做这个 Foo
  • “Lato”字体在 Safari 中呈现奇怪,而不是在 Chrome 或 Firefox 中呈现

    我使用谷歌网络字体中的 Lato 字体 它在除 safari 之外的所有浏览器上显示良好 我用它font weight 100 以下是不同浏览器的一些屏幕截图 知道什么可能导致它变得非常薄吗 或者如果有办法我可以将其设置为渲染font we
  • 如何在Android中设置EditText的最小和最大字符限制?

    我想设置 EditText 框的最小和最大输入值 我正在为 EditText 创建一个简单的验证 它采用 A Z 和 0 9 值 最小 5 个字符 最大 8 个字符 我设置最大验证和其他验证如下
  • 通过不同的容器修改std容器的内容

    我不知道这是否是正确的方法 但我认为它解释了我想要实现的目标 我有三个向量 std vector
  • 如何检查postgres用户是否存在?

    createuser允许在 PostgreSQL 中创建用户 ROLE 有没有一种简单的方法来检查该用户 名称 是否已经存在 否则 createuser 返回错误 createuser creation of new role failed
  • 在 GKE 下时拒绝EscalatingExec

    我们将 GKE 与 Kubernetes 集群结合使用 我们正在运行的应用程序之一是 Jenkins for CI 不幸的是 Jenkins Slave 需要使用 Docker 来挂载其主机的docker sock 这可能是一种升级漏洞 解
  • 当出现客户端未知错误时如何在 Perforce P4 中设置客户端根

    突然 当我跑步时p4 info在终端中 我注意到客户端根目录未设置 不知道为什么它突然被取消设置 以下是输出 其中显示 客户端未知 代替客户端根目录 我可以通过什么命令设置一样吗 我试过了p4 client and p4 set但可能是 语
  • 使用 Google Analytics for Android SDK 时遇到的问题 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 使用适用于 Android 的 Go
  • Python Flask 在执行函数的同时返回 html 页面

    我目前正在使用 Python Flask 创建一个 Web 应用程序 但我遇到了障碍 我不确定我是否正确地思考了它 因此 我网站的主页只是一个简单的登陆页面 其中包含执行网站功能所需的文本输入 我想要完成的是让网络应用程序在输入文本后执行两
  • 如何从部分视图将 JavaScript 渲染到 MasterLayout 部分?

    给定 MVC3 和 Razor 引擎 我得到 MasterLayout cshtml RenderSection JavaScript required false RenderBody 查看 cshtml MasterLayout csh