当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET中是否有任何本地方式可以执行"成功消息"?

如何解决《ASP.NET中是否有任何本地方式可以执行"成功消息"?》经验,为你挑选了1个好方法。

假设你有类似ASP.NET ASP:DetailsView来显示和编辑数据库中的单个记录.

记录错误案例很简单...您添加验证和验证摘要.当您的更新表单验证失败时,它会自然产生噪音:它会显示验证消息和/或验证摘要.不需要一个代码.

但是,然后,您通过验证,它会完全默默地进行更新.没有任何意义发生任何事情,似乎没有任何默认设置可以在没有代码隐藏的情况下制作成功消息.

但是,即使是代码隐藏也令人困惑.什么事件应该显示成功消息?onItemUpdate,对吧?很好,但是让我们说你做了另一个改变并得到验证错误?您的成功消息仍然存在 如果存在验证错误,我无法找到可靠地关闭现有成功消息的事件.

这应该是web开发101!为什么这么难?

编辑:

有人建议使用ItemCommand事件...我尝试了这个和许多其他事件,但成功消息不会消失.这是一些代码.

我在ASP.NET中的消息


我的DataView标签(简化):

    

而且,我的代码隐藏:

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

然而,一旦我成功更新,似乎没有任何东西使该消息消失,甚至验证失败.

第二次编辑:

只是想明确我确实尝试将ClearMessages代码放在Page_Load中.但是,当我在第二次更新时遇到验证错误,似乎没有任何东西使successMessage标签消失.有人可以建议任何其他疑难解答提示



1> Dan C...:

据我所知,没有本土方式这样做.你可能会咆哮,也许微软会听到它:).

重置Page_Load上的"成功消息"或代码隐藏中的任何位置都不起作用.这是因为ASP.NET验证通常在客户端和服务器端完成.这意味着对于您放在页面上的每个验证控件,ASP.NET会生成一些客户端Javascript来执行验证并在客户端上呈现错误,而无需返回到服务器.因此,您同时遇到了成功消息和错误消息.

你可以做些什么:

在您的页面上放置一个控件,显示成功消息(如上面其他人已经建议的那样).每当您更新某些内容(在服务器端代码中)时,请显示控件并设置有意义的"成功!" 消息文本.

注册一个自定义Javascript函数,该函数将

在每个提交的页面上查找并隐藏它.请注意,需要在执行验证的自动生成的客户端脚本之前调用该函数.

如果你看一下ASP.NET页面的客户端源代码(上面有验证器),你可以找到以下内容:

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,或者单击某个Save按钮或其他任何内容时),您将显示带有"success"消息的div控件.在下一个回发中,在将页面提交到服务器之前,此消息将被清除.当然,如果此回发也触发"成功",则服务器上的代码隐藏再次显示该消息.等等等等.

我希望以上内容对您有所帮助.这不是完整的解决方案,但它提供了足够的提示,使您指向正确的方向.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有