我有一个简单的 ASP.Net 登录页面。单击登录按钮时,页面应该回发,并且事件应该由我的服务器端事件处理程序处理。相反,页面只是重新加载。 Page.IsPostBack
为false
。
我已在 Master 页、ASPX 页和 UserControl (ascx) 的 Page_Load/Init(如果适用)处理程序中放置了断点。当我点击“登录”按钮时,我只是像新请求一样加载页面,而不是返回帖子并调用事件处理程序。
但这还没有结束!登录页面采用单个查询字符串参数:Login.aspx?id=123456
。使用该参数时会出现上述故障。但是,如果我启用 URL 重写来执行查询 Login/123456
,则不会发生错误;我收到回复,并在本例中调用我的事件处理程序。
那么为什么我没有从我的页面获得预期的行为呢?重写 URL 后问题会消失吗?
登录按钮在LoginUserControl.ascx
中声明:
<asp:Button ID="SubmitLinkButton" runat="server" Text='Log In' OnClick="SubmitLinkButton_Click"></asp:Button>
以及后面代码中的处理程序:
protected void SubmitLinkButton_Click(object sender, EventArgs e)
{
Authenticate();
}
SubmitLinkButton_Click
永远不会被调用。 :(
编辑(更多代码):
//Page_Init on the Master page
protected void Page_Init(object sender, EventArgs e)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
try
{
if (SessionFacade.User != null)
{
loginlabel.Text = "Logged in |";
LoginLink.Visible = true;
}
}
catch
{
FormsAuthentication.SignOut();
CacheFacade.RemoveSessionValues();
Session.Abandon();
Session.RemoveAll();
HttpContext.Current.Response.Redirect("~/Login.aspx");
}
}
else
{
loginlabel.Text = "";
LoginLink.Visible = false;
}
}
ASPX 页面上的 Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack.Equals(false))
{
/* Some business stuff that boils down to this: */
Session["company"] = Request["company"];
}
}
登录控件上的Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//honestly, there's no code here
}
}
P.S:我需要保留访问登录页面的非 URL 重写方式,因为许多用户仍在导航到该 URL。
P.P.S:即使不启用 URL 重写,错误仍然会发生。
最佳答案
过去每当我看到这个问题时,通常都会将其归因于 URL 重写。我通常会调用 Fiddler跟踪 HTTP 事件。我的直觉告诉我,在您单击按钮并看到 POST 请求后,很快就会出现 302 重定向到登录页面的情况。
您在login.aspx页面中注意到“使用该参数时出现上述故障”。您确定没有 url 重写器配置,例如,可能会删除任何查询字符串值并执行重定向?
关于ASP.Net 页面未回发 - 而是重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8876066/