禁用验证器在回发时丢失内容

时间:2012-07-10 11:51:31

标签: asp.net validation

要点:
已禁用ASP.NET验证程序在发回服务器时丢失其InnerHTML内容,然后在启用时(本地通过JavaScript)在触发时显示ErrorMessage而不是原始InnerHTML。< / p>

更多详情:
我处理一些复杂的表单,需要许多单独的控件可见/不可见,并且启用/禁用它们的验证器,具体取决于其他控件的选择。

所有验证器都包含一个“星号”图像,并通过中心asp:ValidatorSummary对象显示错误消息。例如(格式化为在这里查看,通常没有空格 UPDATE ,这实际上不正确,请参阅下面的更新)...

<asp:RequiredFieldValidator runat="server" ID="valName" 
  ControlToValidate="txtName" ErrorMessage="Enter a name">
    <img runat="server" src="~/images/error.gif" />
</asp:RequiredFieldValidator>

不是在每个验证器上使用asp:CustomValidator(每个验证器需要本地JavaScript和服务器端处理程序),我只需在普通验证器上设置.enabled = false作为“父”的事件处理程序的一部分“ 控制。 (控件的状态也在初始页面加载时在服务器端设置,以及后续的后页加载。)

function showName(show){
  document.getElementById("txtName").style.display = (show ? "" : "none");
  document.getElementById("valName").enabled = show;
}

问题在于一系列事件,其中验证器被禁用,表单被回发...然后控件被更改(通过用户交互)并启用验证器。如果验证程序现在失败(在尝试回复后)<img代码已经消失,那么它会显示图像所在的ErrorMessage文本。

只要验证程序保持启用状态,InnerHTML就会一直存在。

除了在每个页面加载(我真的不想做)上动态地将图像添加到每个验证器,或者将它们全部转换为CustomValidator s(再次我真的不想这样做,有没有人知道这个?这是一个已知的错误(因为我找不到任何明显的东西)?

我在Visual Studio 2010下使用ASP.NET 2.0 - 遗憾的是,目前尚无法升级到更高版本的ASP.NET。

更新
我刚刚发现,<img标记实际上前面有一个&nbsp;实体...如果我删除它,只在验证器中留下<img标记,它就可以了。 / p>

经过大量的播放后,如果验证器的InnerHTML只包含纯文本(即没有ASP服务器端控件),那么我可以解决问题,那么InnerHTML将在后面的帖子中持续存在无论验证器是否启用。

但是,如果InnerHTML 开头的任何纯文本(除了空格)并且还有任何服务器端控件,那么当它不能正确地保留在回发之后验证器已禁用。

我不明白为什么会出现这种情况,但对于次要的格式问题,我当然可以应付它...或者我要将&nbsp;置于文字内,或{ {1}} style标记...在该标记上有很多不同的选项。

使用ASP.NET 4.0测试床应用程序,我可以确认在该版本中发生了同样的事情。

如果在接下来的几天里没有人想要添加任何其他内容,我将自己“回答”上述问题。

1 个答案:

答案 0 :(得分:0)

正如我在更新后的问题中所述,问题的原因是由于InnerHTML的{​​{1}}以&nbsp;开头,然后包含服务器端控件。

在我之前......

<asp:RequiredFieldValidator runat="server" ID="valName" ControlToValidate="txtName"
  ErrorMessage="Enter a name">&nbsp;<img runat="server" src="~/images/error.gif" 
  /></asp:RequiredFieldValidator>

要解决此问题,我只需删除&nbsp; ...

<asp:RequiredFieldValidator runat="server" ID="valName" ControlToValidate="txtName"
  ErrorMessage="Enter a name"><img runat="server" src="~/images/error.gif" 
  /></asp:RequiredFieldValidator>

希望这会有助于其他人,万一他们发现自己处于某种情况。

与往常一样,如果有人提出不同的答案/解决方案,我总是愿意重新考虑我的选择。

相关问题