如何在页面重定向到另一个页面之前在客户端显示成功消息
本文关键字:客户端 显示 成功 消息 重定向 另一个 | 更新日期: 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();
}
值得注意的是,这是一个比显示成功消息然后重定向更好的做法,因为它不会减慢用户的速度。您只希望为非常重要的消息这样做,而不是报告成功;