asp.net-mvc-3 - 如何在 View 和部分 View (合并)中多次使用“ Razor ”部分而不覆盖它?

标签 asp.net-mvc-3 razor

在_Layout.cshtml文件中,我在主体底部有一个名为“ScriptsContent”的部分,声明如下:

@RenderSection("ScriptsContent", required: false)

在我看来,然后我可以使用此部分添加要执行的脚本。但是,如果我还有一个PartialView,也需要使用此部分添加其他脚本怎么办?

查看
@section ScriptsContent
{
    <script type="text/javascript">
        alert(1);
    </script>
}

@Html.Partial("PartialView")

PartialView
@section ScriptsContent
{
    <script type="text/javascript">
        alert(2);
    </script>
}

结果

仅第一个脚本被渲染。该网页的源代码中不存在第二个脚本。

Razor似乎只输出他看到的第一个@section ScriptsContent。我想知道的是,是否有一种方法可以将每个调用合并到该部分。

如果我们不能做到这一点,您有什么建议?

感谢您的帮助!

更新

我找到了一些解决问题的代码。看到我的answer below

最佳答案

这是该问题的解决方案。来自此博客:http://blog.logrythmik.com/post/A-Script-Block-Templated-Delegate-for-Inline-Scripts-in-Razor-Partials.aspx

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());
    }
}

因此,在您的View或PartialView中的任何地方都可以使用此代码:
@this.ScriptBlock(
    @<script type='text/javascript'>
        alert(1);
    </script>
)

并在_Layout或MasterView中使用以下命令:
@this.WriteScriptBlocks()

关于asp.net-mvc-3 - 如何在 View 和部分 View (合并)中多次使用“ Razor ”部分而不覆盖它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7081009/

相关文章:

jquery - 如何在 MVC5 中使用 Jquery 屏蔽输入?

c# - ASP.NET MVC 将 userID 放置在隐藏字段中

asp.net-mvc - MVC RequireHttps 属性毫无值(value)?

javascript - ASP.NET MVC 3 Razor : Include JavaScript file in the head tag

c# - MVC Razor 隐藏输入和传递值

asp.net-mvc - 我应该让 MVC 处理我的网站图标请求吗?

javascript - 如何使用局部 View 展开/折叠 html 表格?

JQuery 1.5 破坏了比较验证(JQuery Validate 1.8)

css - ASP.NET MVC3 C# - 按条件的 CSS

asp.net-mvc - 我可以共享相同的 View 以在 MVC3 中创建和编辑吗