在ViewPage中重载以将一些脚本插入到所有ViewPage的最佳方法是什么?

时间:2009-10-20 11:18:12

标签: asp.net asp.net-mvc

我想在所有视图页面中插入JavaScript库所需的一些脚本。我知道Asp.net MVC是基于Asp.net Framework构建的。因此,我可以覆盖“System.Web.UI.Page”类中的许多方法,该类是“System.Web.Mvc.ViewPage”类的父级。

尽管如此,我可以通过覆盖Render方法来实现它,但它会使所有视图页对 XHTML 1.0 strict 无效。必须将正确的JavaScript放在HTML文档的标头标记中。

public class ViewPage<TModel> : ViewPage where TModel : class 
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        base.Render(writer);
        writer.Write("<script type='text/javascript>applicationPath = window.applicationPath = 'somePath';</script>");
    }
}

谢谢,

PS。我知道我可以在每个母版页中创建一些代码来执行此操作。但是,对于其他开发人员来说,开始使用我的JavaScript源代码非常复杂。

2 个答案:

答案 0 :(得分:1)

不要在代码中执行;在标记中做。将脚本标记添加到Site.Master,在正确有效的位置。

答案 1 :(得分:0)

我只看到View Page&amp; View Master Page始终在服务器上运行。请查看以下模板。

ViewPage的默认模板

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <div>

    </div>
</body>
</html>

ViewMasterPage的默认模板

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
</head>
<body>
    <div>
        <asp:ContentPlaceHolder ID="MainContent" runat="server">

        </asp:ContentPlaceHolder>
    </div>
</body>
</html>

因此,通过向标题控件添加一些控件来解决这个问题非常容易。

public class ViewPage : mvc.ViewPage
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        if (Header == null)
            throw new Exception("Header object is null. Please set header runat=\"server\".");

        Header.Controls.Add(new LiteralControl(CommonHelper.JavaScript(MvcUtils.GetApplicationUrl(Request) ,string.Empty)));

        base.Render(writer);
    }
}