Asp.net MVC HtmlHelpers:你能写进页眉吗?

Asp.net MVC HtmlHelpers:你能写进页眉吗?,asp.net,asp.net-mvc,asp.net-webcontrol,Asp.net,Asp.net Mvc,Asp.net Webcontrol,我是一名web表单程序员,对学习MVC感兴趣。我已经创建了一整套web控件,可以直接访问页眉并在其中写入内容。例如,如果我有一个控件来呈现带有datepicker功能的文本框,它可以访问页眉,以便自动添加指向所需JavaScript和CSS文件的链接。我喜欢这个,因为我懒得去想我需要什么样的链接文件。一个懒惰的程序员是一个好的程序员,对吗 我的问题是,在MVC中有这样做的方法吗?也就是说,要创建一个自定义的HtmlHelper(例如),它可以在页面上呈现控件标记的同时,将所需的脚本和链接标记呈现

我是一名web表单程序员,对学习MVC感兴趣。我已经创建了一整套web控件,可以直接访问页眉并在其中写入内容。例如,如果我有一个控件来呈现带有datepicker功能的文本框,它可以访问页眉,以便自动添加指向所需JavaScript和CSS文件的链接。我喜欢这个,因为我懒得去想我需要什么样的链接文件。一个懒惰的程序员是一个好的程序员,对吗


我的问题是,在MVC中有这样做的方法吗?也就是说,要创建一个自定义的HtmlHelper(例如),它可以在页面上呈现控件标记的同时,将所需的脚本和链接标记呈现到页面标题中?

\u Layout.cshtml
(基本上是母版页)中使用MVC3,您可以使用
@render.Partial(“header”,required:false)

然后,可以在视图中使用命名分区

@section Header {
    @{ Html.MyHelper.GetResources(); }
}

@Html.MyHelper.DoSomething()

如果
required:false,这意味着如果视图没有标题的命名部分,MVC3不会出错。如果您想要求所有页面都有一个命名的节(例如面包团),您可以使用
required:true
(这是默认值),如果视图没有
@节头,则会出错。

在web表单中,您有自定义服务器控件,可以获取页面对象并使用它?Asp.net mvc没有服务器控件和页面对象

对我来说,这样链接资源是个坏主意——在客户端优化最佳实践中——向服务器打开最少数量的资源请求。您可以下载YSlow以提高站点的性能


但如果您愿意,您可以创建扩展方法并在视图中使用它,或者创建actionfilterattribute,设置一些url字符串

是的,-Telerik通过其
脚本注册器
样式表
注册器在这方面做得很好。一个好的起点是

一种脚本管理器 我在互联网上找到了与您的问题部分相关的资源,这可能是在这方面可以做的最多的资源

该解决方案实际上并不在
HEAD
元素中渲染,但它只帮助从局部视图中添加脚本一次,并在主视图中渲染脚本。因此,您不必担心部分视图脚本。他们会照顾好自己(也就是说,更加封闭)

自定义视图引擎方法 但除此之外,我认为可以将引用保存在字典中(类似于上面的链接),然后使用自己的视图引擎在最终渲染脚本引用中渲染头部

自定义
ViewPage
class方法 您还可以为视图和局部视图编写您的WIN类。通过这种方式,您可以更改视图的渲染方式,这将再次使用某种字典。您可以通过
Html
helper扩展方法填充该字典,或者创建一个自定义的
ViewUserControl
类,该类将具有此类功能


在这三个元素中,我认为最后一个是最简单的,可以在
HEAD
元素中编写。您还可以在其中提供进行资源组合的功能。

我想这非常类似:您可以指定您正在使用的视图引擎(添加标记)吗@Robert-这是默认的视图引擎。我想你误解了这个问题。@Chris:就我理解他的问题而言,他不是在说是否可以渲染到页面的
标题
部分,而是是否可以在主视图的
标题
中从父视图中渲染的部分视图中进行白色渲染视图
HtmlHelper
在适当位置添加内容,而不是在页面的其他部分添加内容。/耸耸肩,没有区别,我对其进行了更新,使其更适合于工作html助手。@Chris Marisic:在视图中是的,因为它们使用一些布局母版。但是,是否可以从局部视图渲染成多个部分?罗伯特·科里特尼克(Robert Koritnik)在阅读你发布的链接上的公认答案时,似乎重复了我在这里所说的话。但这仍然不能回答他的问题。您的答案更多地是关于脚本组合以减少请求数量,而不是在
head
元素中添加脚本引用。是的。你在写信。但我不知道他是如何决定在asp.NETMVC中呈现服务器控件的:是局部视图还是呈现操作还是其他什么。确定css或脚本的另一种方法是使用键-控制器、值-字符串数组(资源)创建启动时应用程序事件静态字典。在视图中,他可以像Helper.MyDictionary[ViewContext.RouteData.Values[“controller”]那样使用这个字符串]