如何在页面重定向到另一个页面之前在客户端显示成功消息

本文关键字:客户端 显示 成功 消息 重定向 另一个 | 更新日期: 2023-09-27 18:08:53

我想做的是当用户单击submit按钮时,后端代码将其添加到数据库中,并在页面重定向到下一页之前在客户端显示成功消息。我如何在后端编写代码?我使用

this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScipt", "<script>alert('Done!');</script>");

但是消息从来没有显示,它直接跳到下一页。

感谢帮助

如何在页面重定向到另一个页面之前在客户端显示成功消息

在少数被请求的应用程序中,我们有一个"Success "。aspx页面"。页面只是显示一条成功消息,然后定时重定向到下一页。通常,我们将重定向目标作为POST变量传递。

定时重定向由Javascript处理,类似如下:

<script type="text/JavaScript">
<!--
setTimeout("location.href = 'http://whateverpage.aspx;",1500);
-->
</script>

我们通过javascript(客户端)来做,因为你可以在服务器端代码中做一个重定向,但没有延迟。重定向是即时的,永远不会显示"Success"消息。

然而,我确实觉得有必要补充一点,这些"成功"页面是我们停止做的事情,除非用户明确要求它,因为它们在一段时间后变得非常烦人。它们在当时看起来是个好主意,但却提供了非常糟糕的游戏体验。在按钮旁边放一个"Success"消息,然后使用相同的setTimeout函数将"Success"的显示设置为"none",以便它在几秒钟后消失。

您可以将消息放在会话中,并让母版页输出/清除您使用的会话变量,以便消息只显示一次。您将在重定向页面而不是原始页面上显示消息。如果您确实需要在原始页面上显示消息,则必须使用ajax。

下面是我用来向会话添加消息的扩展方法(包括一个css类参数,因此我们可以根据消息类型为错误涂上颜色):

    public const string Index = "messages-some-unique-key";
    public static void AddMessage(this HttpSessionStateBase session, string message, string messageClass)
    {
        if (session[Index] == null)
            session[Index] = new List<KeyValuePair<string, string>>();
        var list = (IList<KeyValuePair<string, string>>) session[Index];
        list.Add(new KeyValuePair<string, string>(
                     message, messageClass));
    }

取出消息只是循环遍历该对象,然后将session[Index]设置为null。我碰巧使用一个IDisposable和一个MVC2 HtmlHelper来显示我的消息,所以我不认为我的显示代码可能对你的特定情况有用。

这里有一些代码,你可以使用将消息转换为html(不是null安全的):

public static string GetAndClearMessages() {
var list = (IList<KeyValuePair<string, string>>) Session[Index];
var listTag = new TagBuilder("ul");
var tags = new StringBuilder();
foreach(var kvp in list)
    {
        var liTag = new TagBuilder("li");
        liTag.AddCssClass(kvp.Value);
        liTag.SetInnerText(kvp.Key.ToString());
        tags.AppendLine(liTag.ToString());
        listTag.InnerHtml = tags.ToString();
    }
    Session[Index] = null;
    return listTag.ToString();
}

值得注意的是,这是一个比显示成功消息然后重定向更好的做法,因为它不会减慢用户的速度。您只希望为非常重要的消息这样做,而不是报告成功;