放置在网站 Site.Master 上的按钮在从 default.aspx 中单击时不会重定向,但按钮在所有其他页面上都有效
Button placed on the website Site.Master doesn't redirect when clicked from default.aspx, however button works from all other pages
我在我正在使用 Visual Studio 开发的网站 (ASP.NET) 的 Site.Master 页面上添加了一个搜索框。
问题
但是我注意到,当我访问 default.aspx 页面并单击“搜索”按钮时,它不会重新定向(您可能会在下面的代码后面看到)。但是,当我访问我网站的其他页面时,该按钮会根据需要重定向。
更新
我注意到 default.apsx 页面上的所有按钮都没有在 default.aspx 页面上引发回发....在其他页面上。按钮工作正常...
代码:
站点管理员
<body>
<form runat="server">
<asp:ScriptManager runat="server">
.......
</asp:ScriptManager>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
......
</div>
<div class="navbar-collapse collapse">
......
</div>
</div>
</div>
<br />
<div class="container body-content">
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
</asp:SiteMapPath>
<div class="row">
<div class="col-md-8">
</div>
<div class="col-md-4">
<div class="input-group">
<asp:TextBox class="form-control" type="text" ID="tbSearch" width="100%" runat="server" placeholder="Search for recipes..."></asp:TextBox>
<span class="input-group-btn">
<asp:Button class="btn btn-primary" type="button" ID="btnSearch" runat="server" Text="Search Recipes" CausesValidation="False" OnClick="btnSearch_Click" ToolTip="Search Recipes" ValidateRequestMode="Disabled" />
</span>
</div>
</div>
</div>
<br />
<asp:ContentPlaceHolder ID="MainContent" runat="server">
.....
</asp:ContentPlaceHolder>
SiteMaster.cs
在后面的代码中,我有以下代码:
public partial class SiteMaster : MasterPage
{
private const string AntiXsrfTokenKey = "__AntiXsrfToken";
private const string AntiXsrfUserNameKey = "__AntiXsrfUserName";
private string _antiXsrfTokenValue;
protected void Page_Init(object sender, EventArgs e)
{
// The code below helps to protect against XSRF attacks
var requestCookie = Request.Cookies[AntiXsrfTokenKey];
Guid requestCookieGuidValue;
if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue))
{
// Use the Anti-XSRF token from the cookie
_antiXsrfTokenValue = requestCookie.Value;
Page.ViewStateUserKey = _antiXsrfTokenValue;
}
else
{
// Generate a new Anti-XSRF token and save to the cookie
_antiXsrfTokenValue = Guid.NewGuid().ToString("N");
Page.ViewStateUserKey = _antiXsrfTokenValue;
var responseCookie = new HttpCookie(AntiXsrfTokenKey)
{
HttpOnly = true,
Value = _antiXsrfTokenValue
};
if (FormsAuthentication.RequireSSL && Request.IsSecureConnection)
{
responseCookie.Secure = true;
}
Response.Cookies.Set(responseCookie);
}
Page.PreLoad += master_Page_PreLoad;
}
protected void master_Page_PreLoad(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Set Anti-XSRF token
ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey;
ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty;
}
else
{
// Validate the Anti-XSRF token
if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue
|| (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty))
{
throw new InvalidOperationException("Validation of Anti-XSRF token failed.");
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Unnamed_LoggingOut(object sender, LoginCancelEventArgs e)
{
Context.GetOwinContext().Authentication.SignOut();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
var searchText = Server.UrlEncode(tbSearch.Text); // URL encode in case of special characters
Response.Redirect("~/Results.aspx?search=" + searchText);
}
}
Default.aspx.cs
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
Label2.Visible = true;
Label1.Visible = false;
tbPost.Visible = false;
Button1.Visible = false;
}
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
Label1.Visible = true;
Label2.Visible = false;
tbPost.Visible = true;
Button1.Visible = true;
}
if (!this.IsPostBack)
{
BindRpt();
}
}
实际上问题是由输入标签引起的...
因此,如果你们中的任何人遇到此问题,请按照以下步骤操作:
检查页面上的任何 java 脚本
检查页面是否有任何输入标签:-
当我在输入标签中添加disable=''时,我的问题就解决了。
您也可以创建一个新页面并将部分代码复制到其中并检查它是否正常工作....
这就是我解决问题的方法
我在我正在使用 Visual Studio 开发的网站 (ASP.NET) 的 Site.Master 页面上添加了一个搜索框。
问题 但是我注意到,当我访问 default.aspx 页面并单击“搜索”按钮时,它不会重新定向(您可能会在下面的代码后面看到)。但是,当我访问我网站的其他页面时,该按钮会根据需要重定向。
更新 我注意到 default.apsx 页面上的所有按钮都没有在 default.aspx 页面上引发回发....在其他页面上。按钮工作正常...
代码:
站点管理员
<body>
<form runat="server">
<asp:ScriptManager runat="server">
.......
</asp:ScriptManager>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
......
</div>
<div class="navbar-collapse collapse">
......
</div>
</div>
</div>
<br />
<div class="container body-content">
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
</asp:SiteMapPath>
<div class="row">
<div class="col-md-8">
</div>
<div class="col-md-4">
<div class="input-group">
<asp:TextBox class="form-control" type="text" ID="tbSearch" width="100%" runat="server" placeholder="Search for recipes..."></asp:TextBox>
<span class="input-group-btn">
<asp:Button class="btn btn-primary" type="button" ID="btnSearch" runat="server" Text="Search Recipes" CausesValidation="False" OnClick="btnSearch_Click" ToolTip="Search Recipes" ValidateRequestMode="Disabled" />
</span>
</div>
</div>
</div>
<br />
<asp:ContentPlaceHolder ID="MainContent" runat="server">
.....
</asp:ContentPlaceHolder>
SiteMaster.cs
在后面的代码中,我有以下代码:
public partial class SiteMaster : MasterPage
{
private const string AntiXsrfTokenKey = "__AntiXsrfToken";
private const string AntiXsrfUserNameKey = "__AntiXsrfUserName";
private string _antiXsrfTokenValue;
protected void Page_Init(object sender, EventArgs e)
{
// The code below helps to protect against XSRF attacks
var requestCookie = Request.Cookies[AntiXsrfTokenKey];
Guid requestCookieGuidValue;
if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue))
{
// Use the Anti-XSRF token from the cookie
_antiXsrfTokenValue = requestCookie.Value;
Page.ViewStateUserKey = _antiXsrfTokenValue;
}
else
{
// Generate a new Anti-XSRF token and save to the cookie
_antiXsrfTokenValue = Guid.NewGuid().ToString("N");
Page.ViewStateUserKey = _antiXsrfTokenValue;
var responseCookie = new HttpCookie(AntiXsrfTokenKey)
{
HttpOnly = true,
Value = _antiXsrfTokenValue
};
if (FormsAuthentication.RequireSSL && Request.IsSecureConnection)
{
responseCookie.Secure = true;
}
Response.Cookies.Set(responseCookie);
}
Page.PreLoad += master_Page_PreLoad;
}
protected void master_Page_PreLoad(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Set Anti-XSRF token
ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey;
ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty;
}
else
{
// Validate the Anti-XSRF token
if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue
|| (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty))
{
throw new InvalidOperationException("Validation of Anti-XSRF token failed.");
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Unnamed_LoggingOut(object sender, LoginCancelEventArgs e)
{
Context.GetOwinContext().Authentication.SignOut();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
var searchText = Server.UrlEncode(tbSearch.Text); // URL encode in case of special characters
Response.Redirect("~/Results.aspx?search=" + searchText);
}
}
Default.aspx.cs
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
Label2.Visible = true;
Label1.Visible = false;
tbPost.Visible = false;
Button1.Visible = false;
}
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
Label1.Visible = true;
Label2.Visible = false;
tbPost.Visible = true;
Button1.Visible = true;
}
if (!this.IsPostBack)
{
BindRpt();
}
}
实际上问题是由输入标签引起的... 因此,如果你们中的任何人遇到此问题,请按照以下步骤操作:
检查页面上的任何 java 脚本
检查页面是否有任何输入标签:- 当我在输入标签中添加disable=''时,我的问题就解决了。
您也可以创建一个新页面并将部分代码复制到其中并检查它是否正常工作....
这就是我解决问题的方法