Dim*_*kiy 18 razor c#-4.0 asp.net-mvc-3
鉴于MVC3和Razor引擎,我得到了
_MasterLayout.cshtml
@RenderSection("JavaScript", required: false)
..
..
@RenderBody()
..
Run Code Online (Sandbox Code Playgroud)
View.cshtml与_ViewStart.cshtml中定义的_MasterLayout.cshtml
..
@Html.RenderAction("PartialView", "PartialController")
..
Run Code Online (Sandbox Code Playgroud)
PartialView.cshtml
..
@section JavaScript
{
........
}
..
Run Code Online (Sandbox Code Playgroud)
如何确保部分视图中的JavaScript最终出现在"主布局"部分中?
上述方案不起作用,因为局部视图没有定义主布局.另一方面,视图确实具有定义了RenderSection的布局.如果我将部分JavaScript从部分视图移动到View,Razor知道将其渲染到何处.但是,由于部分视图没有布局,因此它不知道如何处理部分JavaScript,因此不会将其呈现在任何地方.
Jas*_*ker 21
我创建了一组扩展方法,用于将脚本块(或任何东西)从局部渲染到主布局.
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());
}
}
Run Code Online (Sandbox Code Playgroud)
然后就可以这样使用:
@this.ScriptBlock(
@<script type='text/javascript'>
$(document).ready(function () {
notify('@message', '@Model.Type.ToString()',
'@Model.Type.ToString().ToLower()');
});
</script>)
Run Code Online (Sandbox Code Playgroud)
然后在主布局中呈现:
@this.WriteScriptBlocks()
Run Code Online (Sandbox Code Playgroud)
在这里查看完整的文章:Razor Partials中的内联脚本的脚本块模板化委托
我不相信部分视图可以设置要在布局页面中使用的部分:(
看起来没有很好的解决方案 - 你可以包括两个部分(一个用于脚本,一个用于内容):
<script stuff>
@Html.RenderAction("PartialViewScripts", "PartialController")
</script stuff>
<body stuff>
@Html.RenderAction("PartialView", "PartialController")
</body stuff>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21519 次 |
最近记录: |