我想要做的是当用户点击submit
按钮时,后端代码会将其添加到数据库中,并在页面重定向到下一页之前在客户端显示成功消息。如何在后端编写代码?我用
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScipt", "<script>alert('Done!');</script>");
但是消息从未显示过,它只是直接跳到下一页。
非常感谢帮助。
答案 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();
}
值得注意的是,这比显示成功消息然后重定向更好,因为它不会减慢用户的速度。您只想为非常重要的消息执行此操作,而不是报告成功;预期的条件。