ASP.Net中的BasePage

时间:2013-09-12 00:35:48

标签: asp.net c#-4.0

我想创建一个基类类页面,其中包含所有脚本链接图标,我到目前为止

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace VGD.Client
{
    public class BasePage : Page
    {
        public new string Title { get; set; }

        protected override void FrameworkInitialize()
        {
            Controls.Add(ParseControl("<!DOCTYPE html>"));
            Controls.Add(ParseControl("<html lang='en'>"));

            Controls.Add(ParseControl(head()));
            Controls.Add(ParseControl(upperBody()));

            base.FrameworkInitialize();
        }

        protected override void OnPreRender(EventArgs e)
        {
            Controls.Add(ParseControl(lowerBody()));

            base.OnPreRender(e);
        }

        private string head()
        {
             string _retVal = @"<head id='Head1' runat='server'>                                    
                                    <title>" + Title + @"</title>                                    
                                </head>";

            return _retVal;
        }

        private string upperBody()
        {
            string _retVal = @"<body>
                                <form runat='server'>";

            return _retVal;
        }

        private string lowerBody()
        {
            string _retVal = @"</form>
                            </body>
                        </html>";

            return _retVal;
        }
    }
}

但是在初始化时,它会抛出错误文件的意外结尾寻找</form>标记。

我将upperBody()lowerBody()分开,以便在创建页面时Home.aspxupperBody()之间添加lowerBody()的内容。< / p>

请帮助。

2 个答案:

答案 0 :(得分:1)

这是您在母版页存在之前必须执行的操作。

使用母版页,你仍然可以在代码隐藏中添加你想要的任何自定义逻辑,但仍然可以利用实际的HTML构建页面,而不必编写你所拥有的那些HTML代码片段。你的例子,像这样:

protected override void FrameworkInitialize()
{
    Controls.Add(ParseControl("<!DOCTYPE html>"));
    Controls.Add(ParseControl("<html lang='en'>"));

    Controls.Add(ParseControl(head()));
    Controls.Add(ParseControl(upperBody()));

    base.FrameworkInitialize();
}

无需在这里重新发明轮子。

更新:

要存储母版页和任何内容页面可用的脚本,请使用以下命令:

<asp:ScriptManager runat="server">
    <Scripts>
        <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=272931&clcid=0x409 --%>
        <%--Framework Scripts--%>

        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>

    </Scripts>
</asp:ScriptManager>

答案 1 :(得分:1)

试试这个:

Page.Header.Controls.Add(Tag("script", _sb.ToString(),
                 new PnAAttribute("type", "text/javascript")));