我有一个应用程序,该应用程序通过将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中消失了
答案 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警报。