gpt4 book ai didi

asp.net - ASP.NET中是否有任何 native 方法来执行 "success message"?

转载 作者:行者123 更新时间:2023-12-04 04:01:39 25 4
gpt4 key购买 nike

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

记录错误情况很简单...您添加验证和验证摘要。当您的更新表单验证失败时,它自然会发出噪音:它会显示验证消息和/或验证摘要。不需要后面的任何代码。

但是,然后,您通过了验证,这使您的更新完全无声。没有任何事情发生的感觉,而且似乎没有任何默认设置可以在没有代码隐藏的情况下发出成功消息。

但是,即使代码隐藏也是令人困惑的。哪个事件应该显示成功消息? onItemUpdate,对不对?很好,但是假设您进行了其他更改并收到验证错误?您的成功消息仍然存在。如果发生验证错误,我找不到能够可靠关闭现有成功消息的事件。

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

编辑:

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

我在ASP.NET中的消息

<label id="successMessage" class="successMessage" runat="server"></label>

和我的DataView标记(简体):
    <asp:DetailsView 
Id="EditClient"
DataKeyNames="LicenseID"
DataSourceID="MySource"
runat="server"
OnItemUpdated="SuccessfulClientUpdate"
OnItemCommand="ClearMessages">

而且,我的代码背后:
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;
}

但是,一旦成功完成更新,似乎什么也不会消失,甚至不会失败。

第2次编辑:

只是想清楚一点,我确实尝试过将ClearMessages代码放在Page_Load中。但是,当我第二次出现带有验证错误的更新时,似乎没有什么能使成功消息标签消失。任何人都可以提出其他任何故障排除提示吗?

最佳答案

据我所知,没有本地的方法可以做到这一点。您可能会提示,也许微软会听到它:)。

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

您可以对此做些什么:

  • 在页面上放置一个<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控件。在下一次回发中,就在将页面提交到服务器之前,此消息已清除。当然,如果此回发也触发了“成功”,则该消息将再次由服务器上的代码隐藏显示。等等等等。

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

    关于asp.net - ASP.NET中是否有任何 native 方法来执行 "success message"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361910/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com