天道酬勤,学无止境

为什么我不能在 ASP.NET 的 HTML 属性中使用 ContentPlaceholder?(Why can't I use a ContentPlaceholder inside HTML attributes in ASP.NET?)

问题

我正在使用 ASP.NET MVC2 和 C#,但这个问题一般适用于 ASP.NET。

这打破了:

<body id="<asp:ContentPlaceHolder ID="BodyID' runat="server" />">

Intellisense 在id=之后立即在body标签和开头引号下划线,并抱怨:

验证 (HTML 4.01):元素“body”在其开始标记中缺少“>”字符。

asp 元素被忽略,并且 id 属性在呈现的 HTML 中为空。 (无论我在 ASP 元素中使用双引号还是单引号,都存在同样的问题,后者会破坏 VS 中的语法高亮显示。)

这有效(假设我设置了会话变量):

<body id="<%: Session["BodyID"] %>">

为什么在 HTML 属性内部支持内联评估,但 ASP 控件不会在属性内部呈现?

这是我的用例:基于从控制器传递的数据,视图知道它正在呈现什么类型的数据。 该视图将数据注入母版页中的不同位置。 我可以将标题注入头部,并将标记注入主体——但我也想将数据注入某些属性。 ID 和类名是明显的例子,但还有其他例子。

我想在保持有效标记的同时做到这一点; 没有像动态渲染整个 body 标签这样的技巧——我想要一个在 Visual Studio 中始终看起来像有效 HTML 或 XML 文档的页面。

使用内联 eval 是可以的,但它需要我设置属性,我在模型或控制器中这样做。 在某些情况下这是必要的,但在其他情况下,这些值是静态的——我有一个专门构建的视图,我只需要从视图中将一个静态值注入母版页。 我不想经历创建抽象控制器类的所有开销,让我的所有控制器都继承自它,等等,只是为了获得在我注入标记时已经拥有的相同功能。

附带问题(是的,我应该为它打开一个单独的问题):ASP 控件和内联代码块的评估顺序是什么? 我假设代码块首先被解析,在 ASP 控件之前,所以我可以例如将代码块放在 ASP 控件声明中。 但是我找不到详细说明该过程的文档-有人可以向我指出它们吗?

谢谢!

更新:泡利提到你确实可以在任何你喜欢的地方使用 ContentPlaceholders,只要它们不在已经标记为runat="server"的元素内。 我再次测试,发现他是正确的——我最初错过了。 Visual Studio 仍然困惑并给出 HTML 验证警告,但在呈现页面时属性中出现预期值。 所以,这个问题的答案是“但你可以!”

回答1
  1. 你不应该在 MVC 中使用 WebForms 控件
  2. 在您的 ID 和 runat 周围使用 '',因为解析器会混淆您所有冲突的“”

由于 body 标记没有 runat="server" 它不被视为服务器控件,而只是清除文本,因此您可以在任何地方放置内容占位符或任何其他控件。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • ASP.NET母版页和内容页中的表单元素(Form Elements in ASP.NET Master Pages and Content Pages)
    问题 好的,我当前项目中的另一个坎bump。 我从来没有在我的两个主页和内容页的表单元素,我倾向于把所有形式的内容的相关指令。 但是,在当前项目中,我们有一个页面,他们需要两者。 右上方的登录表单和内容中的问题表单。 试图弄明白这一点之后,我遇到了ASP.NET的问题,抱怨在母版页中需要单个表单元素。 TBH,我真的不明白为什么这是ASP.NET的要求,但是,嘿。 有谁知道/是否/如何使母版页和内容页包含独立工作的表单元素? 如果没有,您能否提供有关如何继续获得所需外观/功能的建议? 回答1 以为我会回顾一些悬而未决的问题,看看是否可以解决其中的一些问题。 这是一个有趣的。 我完全拒绝相信您只能在ASP.NET页面上使用一种表单。 这对我来说毫无意义。 我已经看到很多网页在一个网页上具有多个表单,为什么ASP.NET页应该有所不同? 所以,这让我开始思考。 为什么ASP.NET页需要表单元素? ASP.NET页尝试通过PostBack模型提供状态持久性来模拟WinForms环境。 这为无状态环境提供了状态元素。 为此,运行时需要能够在每个“表单”中维护此状态。 它通过将数据回传到自身来实现。 重要的是要注意: 关于PostBack并没有真正的幻想。 它使用来自任何其他堆栈的HTTP形式和POST(与任何其他形式相同)。 仅仅因为看起来它可能正在做一些特别的事情,不是这样
  • 为什么 jQuery 不能与 ASP.NET 一起工作?(Why isn't jQuery working with ASP.NET for me?)
    问题 这不起作用,我不明白为什么,我已经在 W3schools 上尝试过该代码并且有效,我认为问题可能出在参考或其他方面,我是 ASP.NET 的新手。 ASP 代码(母版页) <script src="./Scripts/jquery-1.4.1.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { $("#bt_insertar").click(function () { alert("Handler for .click() called."); }); }); </script> <asp:ContentPlaceHolder id="head" runat="server"></asp:ContentPlaceHolder> 索引.aspx <td class="style4"> <asp:Button ID="bt_insertar" runat="server" Text="Insertar" Width="71px" onclick="bt_insertar_Click" style="height: 26px" /> </td> 回答1 默认情况下,该ID你给你的runat="server
  • 如何停止ASP.NET更改ID以使用jQuery(How to stop ASP.NET from changing IDs in order to use jQuery)
    问题 我的网页中有这个标签控件 <asp:Label ID="Label1" runat="server" Text="test"></asp:Label> 并且当页面呈现时,控件的id会变成这样 <span id="ctl00_ContentPlaceHolder1_Label3">test</span> 我怎样才能阻止asp.net更改ID以执行这样的jQuery操作 $('#label1').html(xml); 回答1 而不是使用这个选择器 $('#Label1') 使用这一代码,基本上您正在使用经典的ASP内联服务器端代码。 $('#<%= Label1.ClientID %>') 这将插入生成的任何ID作为文字放置。 如果您希望使用外部文件,则建议您在页面上创建一个全局obj,以保存所有客户端ID,然后在外部文件中引用该obj(不理想,但这是一个解决方案) var MyClientIDs = { Label1 = '<%= Label1.ClientID %>', Label2 = '<%= Label2.ClientID %>', Textbox1 = '<%= Textbox1.ClientID %>', Textbox2 = '<%= Textbox2.ClientID %>' }; 然后在您的外部文件中,您可以访问Label1,例如: $('#' +
  • 了解Runat服务器属性(Understanding the runat server attribute)
    问题 我真的是ASP.NET的新手。 我只是在签出默认的ASP.NET Web应用程序。 默认情况下,它带有几个页面(Default.aspx,About.aspx等)。 我注意到Site.master文件是我为页面创建主布局的文件。 但我也注意到head标记具有runat="server"属性。 我知道此标签用于<asp:XXX>标签,但是为什么要用于<head>标签呢??? 另外,当我删除该属性时,所有样式都将从网页上消失。 因此看来它正在做某事。 我只是不明白它到底在做什么... 那么,为什么在HTML标签上呢... ??? 我看不到应该在服务器上运行的任何代码... <head runat="server"> <title>Hallo</title> <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> <!-- This part is run on the server. So why does the head tag also need a runat=server ?? --> <asp:ContentPlaceHolder ID="HeadContent" runat="server"> </asp:ContentPlaceHolder> </head> 回答1
  • ASP.NET MVC-查看母版页,如何设置标题?(ASP.NET MVC - View with master page, how to set title?)
    问题 使用母版页时,为视图设置html标题(顶部)的首选方法是什么? 一种方法是在.aspx文件中使用Page.Title,但这在母版页中可能会与HTML代码混淆。 因此,假设没有服务器端控件,只有纯HTML。 还有更好的主意吗? 更新:我想在控制器或模型中不在视图中设置标题。 回答1 在母版页中,我们创建了一个“ init” ContentPlaceHolder和一个“ title” ContentPlaceHolder。 如果有人想以编程方式设置Page.Title,则可以在CSharp中的init占位符中进行设置,也可以使用标签覆盖“ title”占位符。 母版页 <asp:ContentPlaceHolder id="init" runat="server"></asp:ContentPlaceHolder> <head runat="server"> <asp:ContentPlaceHolder ID="title" runat="server"> <title><%=this.Page.Title%></title> </asp:ContentPlaceHolder> </head> 查看页面可以覆盖整个“标题”内容占位符: <asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server">
  • ASP.NET:压缩 ViewState(ASP.NET: Compress ViewState)
    问题 压缩 ASP.NET ViewState 内容的最新和最好的方法是什么? 这个性能怎么样? 保持页面快速并最小化数据流量是否值得? 我怎样才能: <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM4Mjc3NDEyOWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgkFLGN0b DAwJENvbnRlbnRQbGFjZUhvbGRlcl9NYWluQ29udGVudCRSYWRCdXQxBSxjdGwwMCRDb250ZW50UGxhY2VIb 2xkZXJfTWFpbkNvbnRlbnQkUmFkQnV0MQUsY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyX01haW5Db250ZW50J FJhZEJ1dDIFLGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcl9NYWluQ29udGVudCRSYWRCdXQyBSxjdGwwMCRDb 250ZW50UGxhY2VIb2xkZXJfTWFpbkNvbnRlbnQkUmFkQnV0MwUsY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyX
  • asp.net ScriptManager PageMethods未定义(asp.net ScriptManager PageMethods is undefined)
    问题 我想从JS调用静态服务器端方法,因此我决定在我的网站上使用ScriptManager控件。 因此,我有一个具有以下结构的母版页: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="TopLevelMasterPage.Master.cs" Inherits="Likedrive.MasterPages.TopLevelMasterPage" %> <!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" xmlns:fb="http://ogp.me/ns/fb#"> <head runat="server"> <title></title> <script type="text/javascript"> function getGiftFileUrl() { function OnSuccess(response) { alert(response); } function OnError(error) { alert(error); }
  • 如何在浏览器中查看母版页(how to view master page in browser)
    问题 刚刚学习母版页,我有一个包含内容的母版页。 但是如何在浏览器中查看页面 .master 呢? 网址是什么? <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!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> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form
  • asp.net 4.0 webforms - 如何以简单的方式将 ContentPlaceHolder1_ 排除在客户端 ID 之外?(asp.net 4.0 webforms - how to keep ContentPlaceHolder1_ out of client id's in a simple way?)
    问题 我正在尝试将母版页引入现有的 webforms 站点,该站点由于过去的客户端 ID 修改而避免使用它们(而且我不想处理修改并在任何地方执行 <% foo.ClientID %> :) 目标:使用“静态”id 值(服务器控件的 id 属性中的任何内容),除了数据绑定/重复控件,这些控件在这些情况下会中断,因此需要后缀或其他任何来区分(基本上,可预测) 现在该站点迁移到 ASP.NET 4.0,我首先尝试使用静态的 ClientIDMode(在 web.config 中),但这破坏了太多重复控件的地方(例如 gridviews 中的复选框),因为它们都产生了相同的结果ID。 因此,我然后尝试了可预测(再次,仅在 web.config 中),以便重复控件不会有冲突的 id,并且它运行良好,除了母版页内容占位符(它确实是一个命名容器)仍在反映在生成的客户端 ID 中(例如,ContentPlaceHolder1_someCheckbox)。 当然,我可以将 web.config 设置保留为静态,然后通过所有数据绑定/重复控件将它们切换到可预测,但我希望有一些更简单/更简单的方法来获得这种效果,而不必在那些 N 中分散 ClientIDMode 属性位置数(或使用我自己的仅设置 clientidmode 的用户控件或其他任何内容扩展所有这些数据绑定控件)。 我什至想过将 web
  • 在 contentplaceholder 中添加标题会添加第二个空标题标签(Adding title in contentplaceholder adds second empty title tag)
    问题 我的母版页在 head 标签中有一个内容占位符。 因为我希望我的页面标题代表当前页面的功能,并且因为我希望将标题翻译成用户的语言,所以我在页面头部的内容占位符中添加了一个标题标签。 除了现在出现第二个空标题标签之外,一切都很好,当然这是无效的。 任何想法如何解决这个问题? 回答1 我遇到了同样的问题,并找到了一个似乎有效的解决方案。 这很hacky,但同时也很简单。 只需在头部添加另一个标题标签,在其中放置一个 runat="server" 属性,然后将其可见性设置为 false: <title visible="false" runat="server"><%-- hack to turn the auto title off --%></title> 回答2 根据 W3C 规范: 每个 HTML 文档的 HEAD 部分都必须有一个 TITLE 元素。 因此,ASP.Net 平台符合标准并向您的页面添加一个空的标题标签以帮助您实现有效标记——它不知道您将通过内容占位符添加一个。 在经典的 ASP.Net 下,您的选择是: 使用@page 指令 Title 来设置这个标签的内容使用后面代码中的 Page.Title 属性以编程方式设置值。 如果您使用的是 ASP.Net MVC,则默认 Site.Master 文件具有以下默认文本: <title><%= Html
  • c# - 在 div id 上使用 FindControl 时出错(c# - error using FindControl on div id)
    问题 我有一个 ASP.NET 站点,我试图从 C# 代码隐藏文件中通过它们的 ID 访问 div 元素。 本质上,我想查看 div 元素是否存在,如果存在,则更改其属性。 我发现很多资源都指向了十几种不同的解决方案,但似乎没有一个有效。 ASP.Net 页面上的 HTML: <div class="contentArea"> <div class="block" id="button1" runat="server"> Some Content Here </div> <div class="block" id="button2" runat="server"> Some Content Here </div> <div class="block" id="button3" runat="server"> Some Content Here </div> </div> C# 代码隐藏(我试过的例子): System.Web.UI.HtmlControls.HtmlGenericControl div1 = (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("button1"); div1.Attributes["class"] = "classNameHere"; 或者 Control div1 =
  • 如何从ASP.NET中的代码隐藏文件访问IFRAME?(How can I access an IFRAME from the codebehind file in ASP.NET?)
    问题 我正在尝试从代码隐藏的aspx.cs文件中为IFRAME html控件设置属性。 我碰到过一篇帖子,说您可以使用FindControl使用以下命令查找非ASP控件: aspx文件包含: <iframe id="contentPanel1" runat="server" /> 然后代码隐藏文件包含: protected void Page_Load(object sender, EventArgs e) { HtmlControl contentPanel1 = (HtmlControl)this.FindControl("contentPanel1"); if (contentPanel1 != null) contentPanel1.Attributes["src"] = "http://www.stackoverflow.com"; } 除了找不到控件之外,contentPanel1为null。 更新1 查看呈现的html: <iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe> 我试图将后面的代码更改为: HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1"
  • 如何在带有 Masterpage 的页面中使用 PostbackUrl(How to use PostbackUrl in Pages with Masterpage)
    问题 谁能给我一个 PostbackUrl 的工作示例,其中目标页面和上一页都有母版。 例如,假设我有两个页面default1.axpx和default2.aspx 。 他们都有一个主页 MyMasterpage.masterpage 我想从default1.aspx回发到default2.aspx ,然后从 default2 页面中的 default1 页面控件中提取数据。 我怎样才能做到这一点? 回答1 您应该将这个问题命名为“如何在ContentPlaceholder找到控件?”,因为您的问题不是PreviousPage不起作用,而是您不了解ContentPlaceholder的工作原理。 这个问题与母版页本身无关,完全与使用ContentPlaceholder相关,它是 asp.net 术语中的命名容器。 FindControls不在命名容器内部搜索,这正是它们的设计方式。 PreviousPage与母版页配合良好,因此我对它们与您的问题有何关系感到困惑。 您可以访问上一页上您想要的任何属性,它实际上会起作用。 例如: HtmlForm form = PreviousPage.Form; // this works fine Control ctrl = PreviousPage.Master.FindControl("TextBox1"); // this works
  • 在 ASP.NET Web 表单中使用纯 html 控件的表单发布值(Form Post Values using plain html controls in ASP.NET web forms)
    问题 我有一个简单的表单,其中包含一些简单的 html 输入,如下所示,使用 ASP.NET Web 表单(不是 MVC) <table id="tbl_SchoolDetails"> <tbody id="tbody_SchoolDetails"> <tr> <td> School Name </td> <td> <input id="SchoolDetails_SchoolName" type="text" value="<%= ViewModel.School.Name %>" /> </td> </tr> <tr> <td> Head Teacher </td> <td> <input id="SchoolDetails_HeadTeacher_Name" type="text" value="<%= ViewModel.School.HeadTeacher.Name %>" /> </td> </tr> <tr> <td> Head Teacher Email </td> <td> <input id="SchoolDetails_HeadTeacher_Email" type="text" value="<%= ViewModel.School.HeadTeacher.Email %>" /> </td> </tr> <tr> <td> Regent/Placement
  • 如何将其他页面包含到aspx文件中(How to include other page to aspx file)
    问题 我想将其他 aspx 文件包含到 asp.net 中的主 aspx 文件中,我可以在 jsp 中做到这一点,jsp 中的代码包含这样的 <jsp:include page="footer.jsp" /> 回答1 您不能在 asp.net 中向现有页面添加另一个页面。 因为asp.net不允许在同一个页面中有两个form tag 。 您可以使用用户控制等功能更多详情 http://www.codeproject.com/Articles/1739/User-controls-in-ASP-NET 编辑 1 此外有Master page和content page的概念这是母版页的好链接 http://www.codeproject.com/Articles/325865/Creating-Master-Page-In-ASP-NET-2010 编辑 2 母版页具有如下结构 <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1
  • 如何禁用ASP按钮(System.Web.UI.WebControls.Button)上的回发(How to disable postback on an asp Button (System.Web.UI.WebControls.Button))
    问题 我有一个asp按钮。 它在服务器端,因此我只能向登录的用户显示它,但是我希望它运行javascript函数,并且当它运行在runat =“ server”时,它总是调用回发事件。 我也有一个常规按钮( <input... >)不在服务器上运行,并且工作正常... 我如何才能使此按钮仅运行javascript而不能回发? 回答1 完成后,让您的JavaScript返回false。 <asp:button runat="server".... OnClientClick="myfunction(); return false;" /> 回答2 YourButton.Attributes.Add("onclick", "return false"); 或者 <asp:button runat="server" ... OnClientClick="return false" /> 回答3 您可以使用jquery click操作并使用preventDefault()函数来避免回发 <asp:button ID="btnMyButton" runat="server" Text="MyButton" /> $("#btnMyButton").click(function (e) { // some actions here e.preventDefault(); } 回答4 考虑一下。
  • 从 ASP.net VB 中的子页面访问母版页属性(Accessing masterpage properties from child pages in ASP.net VB)
    问题 我有 masterpage.master.vb 在那里我有属性,例如; Private _SQLerror As String Public Property SQLerror() As String Get Return _SQLerror End Get Set(ByVal value As String) _SQLerror = String.Empty End Set End Property 然后我有一个 aspx 页面,我需要在其中使用此属性,例如; If **[masterpage property sqlerror]** = Nothing Then InternalSQLErrLabel.Text = ("No Errors Reported") End If 谁能给我一个想法如何去做? 我试过搜索,但大多数文章都是在 Web 控件的上下文中讨论的...... 谢谢。 回答1 干得好: 如何:引用 ASP.NET 母版页内容 从文章看, If Master.SQLerror = Nothing Then InternalSQLErrLabel.Text = ("No Errors Reported") End If 应该为你工作。 请务必按照描述添加 MasterType 指令,否则您可能会收到类型转换错误。 (或者您可以使用母版页类型的变量而不是
  • ASP.NET页未加载CSS样式(ASP.NET page is not loading CSS styles)
    问题 这是ASP.NET中使用VS 2010的带有C#的简单网站。对于该项目,我具有以下目录结构: 起始页是Default.aspx ,它可以完美加载。 但是,当我从“默认”页面打开页面Interface/SystemAdminLogin.aspx ,它没有CSS样式加载。 我已经在母版页中导入了CSS样式表。 这是我在两个.aspx文件中引用MasterPage文件的方式: Default.aspx : <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> SystemAdminLogin.aspx : <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="SystemAdminLogin.aspx.cs" Inherits="_Default" %> 我的代码没有看到任何错误,但是为什么Interface文件夹中的Page无法加载CSS样式? 请帮忙。 这是我要导入css文件的母版页代码: <
  • 如何在内容页面、asp.net 中使用 javascript(How to use javascript in content page, asp.net)
    问题 我从教程中得到了一个 jQuery 示例代码,它甚至是一个单一的网络表单示例。 当我将它集成到我的项目中并在内容页面中使用它时,JavaScript 不起作用。 这是我的母版页代码: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApplication2.Site1" %> <!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> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat=
  • SimpleModal 和 ASP.NET MasterPage(SimpleModal and ASP.NET MasterPage)
    问题 将 SimpleModal 与 ASP.NET 和 MasterPages 集成 这是在此处找到的先前线程的延续。 感谢我之前收到的帮助,代码在一个页面中工作,我能够使用 SimpleModal。 但是我的应用程序有 MasterPages,所以我将它粘贴到另一个测试表单中。 结果与我在没有 MasterPage 的情况下运行的测试不同。 如果没有 MasterPage,模式会打开并保持打开状态,直到被用户关闭。 使用此 MasterPage 版本,模式仅打开一秒钟,然后关闭。 有人知道为什么吗? 下面是一个默认的示例母版页。 没有进行任何编辑。 <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Test.master.cs" Inherits="Test" %> <!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> <asp:ContentPlaceHolder