奇怪 - 单击“更新”按钮不会因<! - tag - >而导致回发

时间:2010-06-02 19:29:27

标签: asp.net html

如果我在 DetailsView 中定义以下模板,则在单击更新插入按钮后,该页面将回发到服务器:

   <EditItemTemplate>
       <asp:TextBox ID="txtDate" runat="server" Text='<%# Bind("Date") %>'></asp:TextBox>
    <asp:CompareValidator ID="valDateType" runat="server" ControlToValidate="txtDate" Type="Date" Operator="DataTypeCheck" Display="Dynamic" >*</asp:CompareValidator> 
</EditItemTemplate>

如果我从上面的代码中删除了CompareValidator控件,只需删除它,那么页面仍然会被回发。但是如果相反,我将 CompareValidator 控件移到<!-- -->标签中,然后将其删除出于某种原因,单击更新插入按钮不会导致回发...而是没有任何反应:

   <EditItemTemplate>
       <asp:TextBox ID="txtDate" runat="server"   Text='<%# Bind("Date") %>'></asp:TextBox>
   <!-- <asp:CompareValidator ID="valDateType" runat="server" ControlToValidate="txtDate" Type="Date" Operator="DataTypeCheck" Display="Dynamic" >*</asp:CompareValidator> -->
</EditItemTemplate>
</EditItemTemplate>

知道为什么页面没有回发?

感谢名单

2 个答案:

答案 0 :(得分:2)

尝试使用服务器端评论:

<%--<asp:CompareValidator ID="valDateType" runat="server" ControlToValidate="txtDate" Type="Date" Operator="DataTypeCheck" Display="Dynamic" >*</asp:CompareValidator>--%>

您还可以使用Enabled="False"属性。

答案 1 :(得分:1)

上周我被(别人的!)JSP中的类似东西咬了一口。 HTML注释不会阻止标记被解析;如果它生成一个HTML注释,你最终会得到嵌套的HTML注释和各种奇怪的事情。

在ASP / JSP中唯一“安全”使用HTML样式的注释分隔符是在它们之间没有生成内容的地方:

<!-- This is safe -->

我们确切地知道在ASP引擎解析它之后将会是什么 - 它看起来会一样。当你有ASP标签时,问题可能咬你:

<!-- This might not be safe because I have no idea 
     what <asp:joesCustomTag/> expands to -->

如果该标记生成HTML评论,您的HTML评论中会有HTML评论!让我们看看解析自定义标记并将HTML发送到浏览器时会发生什么:

<!-- This might not be safe because I have no idea 
     what 

     <!-- Joe's custom tag -->
     <p>Joe is 1337</p>

     expands to -->

你可以在那里看到问题 - SO自己的解析器被嵌套的注释混淆了。 最安全的做法是假设每个代码都会生成HTML注释,并且将其放入HTML注释中会让您感到厌烦。即使它是您的标记,您也可以稍后向其添加HTML注释。

正如Paperjam所说,答案是使用正确的服务器端评论来评论事情 - 当然,你真的不应该留下评论出去的东西等着咬你。如果您确实希望评论显示在HTML源代码中,请仅使用HTML样式的评论。