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

时间:2011-09-16 15:45:20

标签: c#

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

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

但是消息从未显示过,它只是直接跳到下一页。

非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

在请求此功能的少数应用中,我们有一个“Success.aspx”页面。该页面只显示成功消息,然后定时重定向到下一页。通常,我们将重定向目标作为POST变量传递。

定时重定向由类似于此的Javascript处理:

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

我们通过javascript(客户端)来实现,因为您可以在服务器端代码中进行重定向,但不会延迟。重定向是立即的,并且永远不会显示“成功”消息。

然而,我确实感到有必要补充说,这些“成功”页面是我们停止做的一些事情,除非用户明确要求它,因为它们在一段时间后变得非常烦人。它们在当时似乎是一个好主意,但提供了非常糟糕的suer体验。你可能更好的服务只是在buton旁边放一个“Success”消息并使用相同的setTimeout函数然后将“Success”的显示设置为“none”,以便它在几秒钟后消失。

答案 1 :(得分:1)

您可以将消息放入Session中,并让您的母版页输出/清除您使用的会话变量,这样消息只会显示一次。您将在重定向页面而不是原始页面上显示消息。如果您确实需要在原始页面上显示消息,则必须使用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();
}

值得注意的是,这比显示成功消息然后重定向更好,因为它不会减慢用户的速度。您只想为非常重要的消息执行此操作,而不是报告成功;预期的条件。