如何在response.redirect到相同URL后将值保留在asp.net标签中

时间:2018-11-12 13:09:27

标签: c# asp.net .net

我有一个应用程序,该应用程序通过将querystring中的凭据传递给我的应用程序来供另一个应用程序使用。我将使用querystring并进行LDAP身份验证。如果失败,我将移至我的应用程序登录页面从URL清除了查询字符串(Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""), false);)后输入了凭据。但是在这里,我必须向用户显示一条消息,例如无效的NT凭据。我将该消息分配给Session变量,然后分配给asp.net标签,但是它不起作用,即没有警告消息到来。 这是我做的代码

if (AutheticateLDAP("LDAP://dc01-opsoft.corp.ae", txtUserName.Value, txtPassword.Value))
        {

        }
        else
        {
            Session["val"] = "Invalid credentials,Use NT  UserId and Password";
            if (!string.IsNullOrEmpty(Request.Url.Query))
            {
                txtUserName.Attributes.Remove("readonly");
                txtPassword.Attributes.Remove("readonly");
                Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""), false);
            }
            lblMsg.Text = Session["val"].ToString();
            return;
        }

在调试时,我可以看到已将值正确分配给lblMsg.Text,但最终它在UI中消失了

1 个答案:

答案 0 :(得分:0)

据我了解,您必须留在同一页面上并显示错误消息。

下面的问题是您执行了响应重定向。之后发生的事情是您执行了重定向,从而导致完整的页面重新加载。

if (!string.IsNullOrEmpty(Request.Url.Query))
{
   Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""), false);
}

通过触发页面重新加载,在响应中分配lblMsg.text之前已经丢失。这意味着在新页面加载中,您必须再次分配标签的值。直到您再次调用完全相同的方法,才能达到设置lblMsg.Text的目的。

看到lblMsg.text被设置的原因是因为进行了Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""), false);。错误的方法不会结束响应,因此它会完成执行方法中的代码,然后执行重定向。

更干净的方法是不使用response.redirect,而是仅显示带有错误的标签。如果您担心查询字符串并想清理它,请继续进行重定向并使用此示例how to show a message after redirect。您可以设置'lblMsg.text`

来代替javascript警报。