MVC HtmlHelpers:你能写入页面标题吗?

时间:2011-03-18 12:29:01

标签: asp.net asp.net-mvc asp.net-webcontrol

我是一名有兴趣学习MVC的网络表单程序员。我创建了一整套Web控件,可以直接访问页眉并在其中编写内容。例如,如果我有一个控件来呈现带有datepicker功能的文本框,它可以访问页眉,以便自动添加指向它所需的JavaScript和CSS文件的链接。我喜欢这个,因为我懒得思考我需要的链接文件。一个懒惰的程序员是一个优秀的程序员,对吗?

我的问题是,有没有办法在MVC中执行此操作?也就是说,要创建一个自定义的HtmlHelper(例如),以及在页面上呈现控件标记,可以将所需的脚本和链接标记呈现到页眉中吗?

4 个答案:

答案 0 :(得分:4)

使用_Layout.cshtml(基本上是母版页)中的MVC3,您可以使用@Render.Partial("Header", required: false)

然后您可以在视图中使用命名部分。

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

@Html.MyHelper.DoSomething()

使用required: false这意味着如果视图没有Header的命名部分,MVC3将不会出错。如果您想要求所有页面都有一个命名部分(例如面包crums),您可以使用required: true(这是默认设置),如果视图没有@section Header则会出错。< / p>

答案 1 :(得分:0)

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

至于我,以这种方式链接资源是不错的主意 - 在客户端优化最佳实践中 - 向服务器打开最少数量的请求以获取资源。您可以下载YSlow以改善您网站的性能。

但是如果你想要你可以创建扩展方法并在视图中使用它或创建actionfilterattribute,它设置了一些url字符串;

答案 2 :(得分:0)

是的, - Telerik在ScriptRegistrarStylesheet注册商处做得很好。一个很好的起点是web asset documentation

答案 3 :(得分:-1)

一种脚本管理器

我在互联网上发现这个资源部分与您的问题有关,可能是这方面可以做的最多。

该解决方案并未真正呈现在HEAD元素中,但它有助于在部分视图中仅添加一次脚本并在主视图中呈现它们。因此,您不必担心部分视图脚本。他们会照顾好自己(更多的是封装)

A Simple ScriptManager for ASP.NET MVC

自定义视图引擎方法

但是我认为通过在字典中保存引用(类似于上层链接的方式)可以实现,然后拥有自己的视图引擎,在最终呈现脚本引用中呈现头部。

自定义ViewPage课程方法

您还可以为视图和部分视图编写您赢过的类。这样,您可以更改视图呈现的方式,再次使用某种字典。您可以通过Html帮助程序扩展方法填充该字典,或者创建具有此类功能的自定义ViewUserControl类。

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