dan*_*sky 9 asp.net asp.net-2.0 c#-3.0
假设你有类似ASP.NET ASP:DetailsView来显示和编辑数据库中的单个记录.
记录错误案例很简单...您添加验证和验证摘要.当您的更新表单验证失败时,它会自然产生噪音:它会显示验证消息和/或验证摘要.不需要一个代码.
但是,然后,您通过验证,它会完全默默地进行更新.没有任何意义发生任何事情,似乎没有任何默认设置可以在没有代码隐藏的情况下制作成功消息.
但是,即使是代码隐藏也令人困惑.什么事件应该显示成功消息?onItemUpdate,对吧?很好,但是让我们说你做了另一个改变并得到验证错误?您的成功消息仍然存在 如果存在验证错误,我无法找到可靠地关闭现有成功消息的事件.
这应该是web开发101!为什么这么难?
编辑:
有人建议使用ItemCommand事件...我尝试了这个和许多其他事件,但成功消息不会消失.这是一些代码.
我在ASP.NET中的消息
<label id="successMessage" class="successMessage" runat="server"></label>
Run Code Online (Sandbox Code Playgroud)
我的DataView标签(简化):
<asp:DetailsView
Id="EditClient"
DataKeyNames="LicenseID"
DataSourceID="MySource"
runat="server"
OnItemUpdated="SuccessfulClientUpdate"
OnItemCommand="ClearMessages">
Run Code Online (Sandbox Code Playgroud)
而且,我的代码隐藏:
protected void SuccessfulClientUpdate(object sender, DetailsViewUpdatedEventArgs e)
{
successMessage.InnerText = string.Format("Your changes were saved.");
successMessage.Visible = true;
}
protected void ClearMessages(object sender, DetailsViewCommandEventArgs e)
{
successMessage.InnerText = string.Empty;
successMessage.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
然而,一旦我成功更新,似乎没有任何东西使该消息消失,甚至验证失败.
第二次编辑:
只是想明确我确实尝试将ClearMessages代码放在Page_Load中.但是,当我在第二次更新时遇到验证错误,似乎没有任何东西使successMessage标签消失.有人可以建议任何其他疑难解答提示
据我所知,没有本土方式这样做.你可能会咆哮,也许微软会听到它:).
重置Page_Load上的"成功消息"或代码隐藏中的任何位置都不起作用.这是因为ASP.NET验证通常在客户端和服务器端完成.这意味着对于您放在页面上的每个验证控件,ASP.NET会生成一些客户端Javascript来执行验证并在客户端上呈现错误,而无需返回到服务器.因此,您同时遇到了成功消息和错误消息.
你可以做些什么:
<div>
在您的页面上放置一个控件,显示成功消息(如上面其他人已经建议的那样).每当您更新某些内容(在服务器端代码中)时,请显示控件并设置有意义的"成功!" 消息文本.<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;
}
Run Code Online (Sandbox Code Playgroud)
要注册隐藏成功消息的自定义代码,您应该(在代码隐藏中)放置以下内容:
if (!Page.ClientScript.IsOnSubmitStatementRegistered("ClearMessage"))
{
string script = @"document.getElementById('" +
yourDivControl.ClientID + "').style.display='none'";
Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "ClearMessage", script);
}
Run Code Online (Sandbox Code Playgroud)
这会将页面的自动生成的WebForm_OnSubmit转换为以下内容:
function WebForm_OnSubmit() {
document.getElementById('ctl00_yourDivControl').style.display='none';
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
效果:在每次回发时(例如,当触发ItemCommand,或者单击某个Save按钮或其他任何内容时),您将显示带有"success"消息的div控件.在下一个回发中,在将页面提交到服务器之前,此消息将被清除.当然,如果此回发也触发"成功",则服务器上的代码隐藏再次显示该消息.等等等等.
我希望以上内容对您有所帮助.这不是完整的解决方案,但它提供了足够的提示,使您指向正确的方向.
归档时间: |
|
查看次数: |
6184 次 |
最近记录: |