2010-06-02 26 views
1

如果我定义里面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控件,然后页面仍然被贴back.But如果不是我内<!-- -->标签去除CompareValidator控制通过包围它,然后某种原因cli盛泰的更新插入按钮不会导致回发...而不是什么都不会发生:

<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> 

任何想法,为什么网页不会被调回?

感谢名单

回答

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样式的评论。

+0

“如果你真的想在HTML源代码中出现注释,只能使用HTML风格的注释”那么我怎么知道何时有html注释不会导致任何问题以及何时会发生? – AspOnMyNet 2010-06-02 20:19:08

+1

@AspOnMyNet:假设HTML注释中的任何*生成的内容可能会以这种方式咬你 - 你不知道它会生成什么HTML。我扩大了我的原始答案。 – 2010-06-03 09:45:43

+0

thanx帮助我 – AspOnMyNet 2010-06-03 17:31:37

2

尝试使用服务器端注释:

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

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