【问题标题】:c#: How to Show Success Message in Client Before Page Redirects to Another Pagec#:如何在页面重定向到另一个页面之前在客户端显示成功消息
【发布时间】:2011-09-17 01:35:21
【问题描述】:

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

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

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

感谢您的帮助。

【问题讨论】:

  • 你考虑过使用 AJAX 吗?
  • AJAX 是唯一的方法吗?我记得这可以通过纯服务器端代码来完成,只是忘记了如何去做。另外,如果使用AJAX,我的参数太多了。
  • 您是在Page_Load 还是在按钮处理程序中调用RegisterClientScriptBlock
  • 你试图在一个动作上做两件事,而你在心理上希望每个动作都有一个结果。首先,当操作成功时,向用户显示一条成功消息(你已经完成了那部分)。然后,在他们单击确定后,重定向。听起来您正在从服务器重定向。在警报后使用客户端重定向:window.location.href="default.aspx"

标签: c#


【解决方案1】:

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

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

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

我们通过 javascript(客户端)执行此操作,因为您可以在服务器端代码中执行重定向,但不会延迟。重定向是即时的,永远不会显示“成功”消息。

不过,我确实觉得有必要补充一点,这些“成功”页面是我们停止做的事情,除非用户明确要求这样做,因为一段时间后它们会变得非常烦人。它们在当时似乎是一个好主意,但提供了非常糟糕的用户体验。最好在按钮旁边放一条“成功”消息并使用相同的 setTimeout 函数将“成功”的显示设置为“无”,使其在几秒钟后消失。

【讨论】:

  • 上一篇文章在我回答的最后一段中展示了建议方法的更简洁的实现。如果你使用它,去投票给那个人! stackoverflow.com/questions/5202015/…
  • 我还需要重定向页面,所以这种方法不符合我的要求。
【解决方案2】:

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

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

【讨论】:

  • 什么部分,检索消息,或放置代码以在网站的每个页面(或至少您重定向到的页面)上显示消息。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
相关资源
最近更新 更多