据我所知,没有本地方法可以做到这一点。你可能会抱怨它,也许微软会听到它:)。
在 Page_Load 上或代码隐藏中的任何位置重置“成功消息”将不起作用。这是因为 ASP.NET 验证通常在客户端和服务器端完成。这意味着对于您放在页面上的每个验证控件,ASP.NET 都会生成一些客户端 Javascript 来执行验证并在客户端上呈现错误,without返回到服务器。因此,您会同时看到成功消息和错误消息。
您可以采取什么措施:
- place a
<div>
控制您的页面上,这将显示成功消息(正如上面其他人已经建议的那样)。每当您更新某些内容(在服务器端代码中)时,请显示控件并设置有意义的“成功!”消息文本。
- 注册一个自定义 Javascript 函数来查找
<div>
并将其隐藏在每个提交的页面上。请注意,需要在执行验证的自动生成的客户端脚本之前调用该函数。
如果您查看 ASP.NET 页面的客户端源代码(其上带有验证器),您可以找到以下内容:
<form name="aspnetForm" method="post" action="MyPage.aspx" onsubmit="javascript:return WebForm_OnSubmit();id="aspnetForm">
WebForm_OnSubmit 由 ASP.NET 生成并调用执行验证的 javascript。样本:
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
return false;
return true;
}
要注册隐藏成功消息的自定义代码,您应该按照以下方式放置(在代码隐藏中)一些内容:
if (!Page.ClientScript.IsOnSubmitStatementRegistered("ClearMessage"))
{
string script = @"document.getElementById('" +
yourDivControl.ClientID + "').style.display='none'";
Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "ClearMessage", script);
}
这会将页面自动生成的 WebForm_OnSubmit 变成以下内容:
function WebForm_OnSubmit() {
document.getElementById('ctl00_yourDivControl').style.display='none';
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
return false;
return true;
}
效果:
在每次回发时(例如,当触发 ItemCommand 时,或单击某个“保存”按钮或其他任何操作时),您将显示带有“成功”消息的 div 控件。在下一次回发时,就在将页面提交到服务器之前,此消息将被清除。当然,如果此回发也触发“成功”,则服务器上的代码隐藏会再次显示该消息。等等等等。
我希望以上内容对您有所帮助。这不是完整的解决方案,但它提供了足够的提示来为您指明正确的方向。