Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3布局页面、视图、RenderPartial和将脚本文件放入页眉(从局部视图)_C#_Asp.net Mvc 3_Razor_Partial Views_Layout Page - Fatal编程技术网

C# MVC3布局页面、视图、RenderPartial和将脚本文件放入页眉(从局部视图)

C# MVC3布局页面、视图、RenderPartial和将脚本文件放入页眉(从局部视图),c#,asp.net-mvc-3,razor,partial-views,layout-page,C#,Asp.net Mvc 3,Razor,Partial Views,Layout Page,所以我有一个布局页面 <head> @RenderSection("HeaderLast", required: false) </head> @渲染部分(“HeaderLast”,必填项:false) 景色 @section HeaderLast { <script src="@Url.Content("~/Scripts/knockout-1.2.0.js")" type="text/

所以我有一个布局页面

<head>
    @RenderSection("HeaderLast", required: false)
</head>

@渲染部分(“HeaderLast”,必填项:false)
景色

@section HeaderLast
{
    <script src="@Url.Content("~/Scripts/knockout-1.2.0.js")"
                            type="text/javascript"></script>
}

<div id="profile-tab">
        @{ Html.RenderPartial("_userProfile"); }
</div>
@段首末段
{
}
@{Html.RenderPartial(“_userProfile”);}
和局部视图

@section HeaderLast
{
    <script type="text/javascript">
        alert('test');
    </script>
}

<div......
@段首末段
{
警报(“测试”);
}

不能在局部视图中定义截面

相反,您可以将Javascript放入
ViewBag
,然后在布局页面的
ViewBag
中发出任何Javascript


@贾斯卡夫:如果一个部分需要它自己的CSS,它就没有好的方法来渲染它

如果这是它使用的原因,它很可能是设计的

您不希望有一个单独的CSS文件x partial/helper。请记住,每个单独的CSS文件都意味着从服务器获取该文件的单独请求,因此额外的往返会影响页面的渲染时间

另外,您也不希望从partial/helper向HTML发送直接CSS。相反,您希望它具有适当的挂钩,您可以使用这些挂钩定义站点CSS文件中的所有外观

启用JavaScript时,您可以使用CSS可用的钩子来激活所涉及元素的自定义JavaScript行为

最后,您可能需要的不是局部视图,而是用于某些页面的额外布局。采用这种方法,您将:

  • 主布局在_ViewStart上自动设置,就像现在一样。这定义了示例中类似的部分
  • 子布局页。在这里,您可以获得这些视图所需的额外html、css和js。这将同时使用@RenderBody()和@section SomeSection{}来构造公共额外布局
  • 有些视图指向子布局,有些视图使用默认主布局
如何向子布局获取额外数据超出了问题的范围,但您有几个选项。就像你的实体有一个共同的基础;使用ViewBag或调用Html.RenderAction获取与布局中共享动态元素相关的共享逻辑。

看起来在SO-上也有类似的问题

不幸的是,不可能在局部视图中声明节。这是因为RenderPartial最终呈现的是完全独立的视图页面。虽然有点难看,但这也有点奇怪。但是,如果使用强类型模型而不是ViewData,效果会更好

基本上,您需要跟踪对名为RenderPartial的视图的引用,并对传递的对象使用DefineSection方法将数据推送到该视图


更新:还有一个关于处理渲染部分的方法,您可能会发现它很有用。

下面是另一个使用助手方法和模板委托的方法

作为我问题的后续,JavaScript/CSS组合器/minifier工具支持此功能,允许您划分JavaScript和其他部分所需的资产


我购买了一个站点许可证,现在在我所有的MVC应用程序中都使用了它。

该部分需要在实际页面中定义,以便框架知道它已经得到了处理否?我不理解这个问题-你想做什么,您想消除什么?@cvista该部分在布局页面中定义,因为这是标题所在的位置@Danny Tuppeny我想从部分视图访问标题我不是说已定义-我是说已实现-您的@部分位于ctrl@ChrisMarisic,你找到解决办法了吗?我也有同样的情况要处理有人为此做过道歉吗?这是一个非常明显的设计缺陷。@Chris-为什么你认为这是一个明显的设计缺陷?@JasCav:如果一个部分需要自己的CSS,它就没有好的方法来渲染它。我同意Chris和SLaks的观点,这是相当烦人的。我希望能够以模块化的方式使用自己的css和js开发部分视图,并且有一种渲染部分视图的机制,能够正确地将css和js放入DOM中。SLaks,有你的解决方案的例子吗?使用多个布局页面似乎是噩梦维护中的一个练习。我已经使用了这种方法,并且随着代码的发展,它的流程很好。我做这件事的具体方式是“调用Html.RenderAction以获取与布局中共享动态元素相关的共享逻辑”。我非常喜欢它,而不是让一个局部视图做一个Html.RenderAction;必须在不相关的操作中处理额外数据,以使其流向局部视图,或使用非类型化方法传递数据。你的样本太笼统了,所以很难说,质疑该部分属于局部视图的概念/可能是某些常见布局的一部分。注意,在我的回答中,真实的局部视图通常出现在第一个场景中,因此,还要质疑该脚本/css是否应该从该部分视图调用,而不是属于与之挂钩的站点级css/js文件。也就是说,有太多的场景,你可能有一个案例,你尝试做的是最好的方法。它独立于这个问题,但是我开始考虑做一些半革命性的事情,考虑实际使用真正的视图是JavaScript文件,所以总是有VIEW.cSHTML和VIEW。JSCSHTML,然后把所有的组件JavaScript部分地写出来。局部视图中的视图或部分,并在“我的js视图”中使用“渲染局部”。我想看看我是否能找到一种方法,让一个部分视图定义一个部分,并在js视图中呈现该部分,这样我的小部件类型组件都是自包含的,只需要提升到view和view.js中就可以了。另一个想法是,不再需要单独的view.js.cshtml,而是实际定义一个javascript在我看来,然后找出如何为