从部分视图中定义访问@section

时间:2013-11-21 16:51:00

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个带标签的页面,每个标签内容都放在partial view with some scripts

作为最佳做法,我想在页面底部添加所有脚本。由于部分视图无法访问@section我将所有脚本放在页面本身,因此很难阅读。

根据权限加载标签。即使用户没有权限,我仍然会渲染这些脚本。

我怎样才能add all the scripts referred in page/partial view at the bottom

WebForm上下文: 我认为它类似于从用户控件访问内容占位符

1 个答案:

答案 0 :(得分:1)

你可以通过使用MVCHtmlHelper的一些Extension Method写这个来做到这一点

这是代码

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

在你的版面设计中

@RenderSection("Scripts", false)
@this.WriteScriptBlocks()

在部分视图中

@model ViewModel


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

请参阅此post