尽管我将我的asp:Button放置在UpdatePanel内,但它仍然在第一次单击时在整个页面上触发回发。另外,第一次单击按钮时也不会捕获OnClick事件,但是此后每次都可以正常工作。
有什么想法可能导致此问题吗?请参见下面的代码。
(在我的Site.Master文件中)
<asp:ScriptManager runat="server" AjaxFrameworkMode="Enabled" EnablePartialRendering="true" ValidateRequestMode="Disabled">
</asp:ScriptManager>
(在我的实际网页中)
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Editor.aspx.cs" Inherits="Technology.WebForm1"
validateRequest="false" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<textarea id="htmlTexarea" runat= "server" style="height: 90%"></textarea>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="testBtn" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Button ID="testBtn" style="" runat="server" ClientIDMode="Static" OnClick="testBtn_Click" UseSubmitBehavior="false" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
我的C#代码背后是:
protected void Page_Init(object sender, EventArgs e) {
testBtn.Click += testBtn_Click;
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void testBtn_Click(object sender, EventArgs e)
{
String test = "Helloworld";
}
我有什么遗漏或做错了吗?
编辑:我将以下内容添加到后面的C#代码中:
protected void Page_Load(object sender, EventArgs e)
{
//Should return POST, returns GET on first click
String test = Request.HttpMethod;
if (!IsPostBack)
{
//stops here first time
String hello = "Hello world";
}
else {
//should stop here
String hello = "Hello world";
}
}
第一次单击该按钮时,服务器收到GET请求并IsPostBack
返回false,而其他所有更改均不更改,IsPostBack
则发送POST请求且为true。有人知道是什么原因造成的吗?
问题是由于我使用Server.Transfer(...)
,从另一个页面转到该页面这一事实引起的,我不确定如何运行,但这会影响该页面首次发送的POST请求,但是在请求之后该页面重新加载后,一切正常。在我的母版页中,我将代码更改为Response.Redirect(...)
,现在可以正常使用了。抱歉,如果这不是最清楚的解释,但说实话,我不太确定为什么可以解决问题,如果有人可以澄清评论中的内容,我将非常感激。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句