gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:49:56 24 4
gpt4 key购买 nike

在_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com