Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#:如何在页面重定向到其他页面之前在客户端显示成功消息_C# - Fatal编程技术网

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

c#:如何在页面重定向到其他页面之前在客户端显示成功消息,c#,C#,我想做的是,当用户单击一个submit按钮时,后端代码将把它添加到数据库中,并在客户端显示一条成功消息,然后页面被重定向到下一页。如何在后端编写代码?我用 this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScipt", "<script>alert('Done!');</script>"); this.ClientScript.RegisterClientScriptBlock(thi

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

this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScipt", "<script>alert('Done!');</script>");
this.ClientScript.RegisterClientScriptBlock(this.GetType(),“clientScipt”,“alert('Done!”);”;
但消息从未显示,它只是直接跳到下一页


非常感谢您的帮助。

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

下面是我用于向会话添加消息的扩展方法(包括css类参数,以便根据消息类型为错误着色):

public const string Index=“messages some unique key”;
公共静态void AddMessage(此HttpSessionStateBase会话、字符串消息、字符串消息类)
{
if(会话[索引]==null)
会话[索引]=新列表();
var list=(IList)会话[索引];
列表。添加(新的KeyValuePair)(
message,messageClass);
}
拉出消息只是在该对象中循环,然后将session[Index]设置为null。我碰巧使用IDisposable和MVC2 HtmlHelper来显示我的消息,所以我认为我的显示代码可能对您的特定情况没有帮助

以下是一些用于将消息转换为html(非空安全)的代码:

公共静态字符串GetAndClearMessages(){
var list=(IList)会话[索引];
var listTag=新标记生成器(“ul”);
var tags=新的StringBuilder();
foreach(列表中的var kvp)
{
var liTag=新标记生成器(“li”);
liTag.ADDCSCLASS(千伏值);
SetInnerText(kvp.Key.ToString());
tags.AppendLine(liTag.ToString());
listTag.InnerHtml=tags.ToString();
}
会话[索引]=空;
返回listTag.ToString();
}

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

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

Javascript处理定时重定向的方式与此类似:

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

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


然而,我不得不补充一点,这些“成功”页面是我们停止做的事情,除非用户明确要求,因为它们在一段时间后变得非常烦人。他们当时似乎是个好主意,但提供了一个非常糟糕的suer体验。在buton旁边放一条“Success”(成功)消息,然后使用相同的setTimeout函数将“Success”(成功)的显示设置为“none”(无),这样几秒钟后它就会消失。您是否考虑过使用AJAX?AJAX是唯一的方法吗?我记得这可以通过纯服务器端代码实现,只是忘记了如何实现。此外,如果使用AJAX,我有太多的参数。您是在
页面\u Load
中还是在按钮处理程序中调用
RegisterClientScriptBlock
?您试图在一个操作上做两件事,而实际上您希望每个操作都有一个结果。首先,当操作成功时,向用户显示一条成功消息(您已经完成了该部分)。然后,在他们单击OK之后,重定向。听起来像是从服务器重定向。在警报后使用客户端重定向:
window.location.href=“default.aspx”
上一篇文章在我的答案的最后一段中显示了建议方法的更清晰的实现。如果你用它,去投票给那个家伙!我还需要重定向页面,这样这种方法就不符合我的要求。什么部分,检索消息,或者把代码放在站点的每个页面(或者至少是重定向到的页面)上显示消息。
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();
}
<script type="text/JavaScript">
<!--
setTimeout("location.href = 'http://whateverpage.aspx;",1500);
-->
</script>