摘要:
禁用的 ASP.NET 验证器在回发到服务器时会丢失其InnerHTML
内容,然后在启用时(通过 JavaScript 在本地)在触发时显示ErrorMessage
而不是原始的。InnerHTML
更多详细信息:
我处理一些复杂的表单,这些表单需要许多单独的控件可见/不可见,并且需要启用/禁用它们的验证器,具体取决于其他控件的选择。
所有验证器都包含一个“星号”图像,并通过中心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
是标签实际上前面有一个
实体......如果我删除它,只<img
在验证器中留下标签,它就可以工作。
经过大量播放后,如果InnerHTML
验证器仅包含纯文本(即没有 ASP 服务器端控件),那么InnerHTML
无论验证器是否启用,它都会在回发中持续存在。
但是,如果InnerHTML
以任何纯文本(空格除外)开头并且还具有任何服务器端控件,那么当验证器被禁用时,它不会在回发中正确保留。
我不明白为什么会这样,但是对于较小的格式问题,我当然可以应付...要么,要么我必须在
里面放一个文字或标签...很多不同的style
选择<img
在那一个。
使用 ASP.NET 4.0 测试平台应用程序,我可以确认在该版本中发生了同样的事情。
如果在接下来的几天里没有人想添加任何其他内容,我将自己用上述内容“回答”这个问题。