C# 为什么asp:UpdatePanel仅在第二次单击按钮时更新hiddenfield值

C# 为什么asp:UpdatePanel仅在第二次单击按钮时更新hiddenfield值,c#,updatepanel,hidden-field,C#,Updatepanel,Hidden Field,单击按钮更新hiddenfield时出现问题。当我点击按钮时, 仅当我单击按钮secondtime时,它不会更新first时间的hiedenfield 然后我得到了正确的值。我在网上搜索这个,但我找不到解决这个问题的方法。有人知道为什么会发生这种情况吗?这是默认行为还是有人可以为我提供一些其他有用的方法来解决这个问题 .aspx文件: <asp:ScriptManager ID="scriptManager" runat="server"> </asp:ScriptManage

单击按钮更新hiddenfield时出现问题。当我点击按钮时, 仅当我单击按钮secondtime时,它不会更新first时间的hiedenfield 然后我得到了正确的值。我在网上搜索这个,但我找不到解决这个问题的方法。有人知道为什么会发生这种情况吗?这是默认行为还是有人可以为我提供一些其他有用的方法来解决这个问题

.aspx文件:

<asp:ScriptManager ID="scriptManager" runat="server">
</asp:ScriptManager>
<asp:RadioButtonList ID="radioQuestion" runat="server">
    <asp:ListItem Text="first" Value="first"></asp:ListItem>
    <asp:ListItem Text="second" Value="second"></asp:ListItem>
</asp:RadioButtonList>
<asp:UpdatePanel ID="updateResult" runat="server" >
    <ContentTemplate>
        <asp:HiddenField ID="hiddenResult" runat="server" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnCheck" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnCheck" runat="server" OnClick="btnCheck_Click" Text="Check"
    CssClass="check"  /> 

我不知道你想做什么。你仍然可以买这个 1) 对于具有
id=updateResult
的updatepanel,不需要触发器,因为未设置
UpdateMode
,默认值始终为true。 2) 您正在更改并检查
文件的值,以便在页面的页眉处进行引用


希望这会有所帮助,对这种情况有帮助的是一种回调机制,它在每次AJAX请求结束时都会被调用。幸运的是,有一个可用的,可以通过以下方式注册:

   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler).
稍后,可以实现EndRequestHandler,以便在请求完成时执行任何javascript代码。参数sender可用于处理特定请求。以下javascript应可用于此目的:

$(document).ready(function () {
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
});
function EndRequestHandler(sender, args) {
   var senderId = sender._activeElement.id;
    if (senderId=="btnCheck") {
        alert($('#<%=hiddenResult.ClientID%>').val());
    }
}
$(文档).ready(函数(){
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
});
函数EndRequestHandler(发送方,参数){
var senderId=发送方。\u activeElement.id;
如果(senderId==“btnCheck”){
警报($('#').val());
}
}
更新:刚刚意识到activeElement可以获取表单上当前关注的元素,在这种情况下,这不一定是一个好的检查权限。下面是更新的javascript,它通过使用_postBackSettings采用了更好的方法:

function EndRequestHandler(sender, args) {
   var senderId = sender._postBackSettings.sourceElement.id;
    if (senderId=="btnCheck") {
        alert($('#<%=hiddenResult.ClientID%>').val());
    }
}
函数EndRequestHandler(发送方,参数){
var senderId=sender.\u postBackSettings.sourceElement.id;
如果(senderId==“btnCheck”){
警报($('#').val());
}
}

每个试图回答我问题的人都给了我很大帮助。这就是为什么谢谢大家,但我也必须说,Saurabh的回答让我找到了正确的解决方案。直到现在我才对AJAX了解很多。回到回答;事实上,Saurabh很快就找到了它,只有很少的修正是必要的,以实现这一点。无论如何,我在下面发布我的工作代码(只是Javascript的一部分):

$(文档).ready(函数(){
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
});
函数EndRequestHandler(发送方,参数){
if(document.getElementById('btnCheck')){
警报($('#').val());
}
}

第一次单击按钮时,
$('hiddensult').val()的值是多少?乍一看,它似乎没有值,在您为它赋值之前,Javascript就被调用了。@keyboardP。好吧,第一次我点击它时什么也不显示。仅当我第二次单击时,它才获得值如果您这样设置它会怎么样。“首次单击”是否显示?如果我设置了hiddenfield值,那么在第一次单击时我将获得设置值,在第二次单击时我将获得RadioButton的选定值ListYour
hiddenfield
没有为其指定默认值。当您第一次单击该按钮时,Javascript代码将在服务器端代码指定“是”或“否”值之前显示HiddenField的值(该字段还没有值)。根据您要执行的操作,如果hiddenResult.Value为空,您可以让服务器调用下一个方法。我尝试在单击按钮时返回所选值,然后显示消息(它不会发出警报,但会以某种模式弹出)。此代码是从我的原始代码简化而来的。正如我在我的问题中所问的,如果有人知道其他的方法,那么这也会很好。我的客户需要这个。如果我在没有Updatepanel的情况下使用它,就不会有问题。我需要以异步方式使用它。我不希望页面被刷新更新以异步方式处理它的答案。请查收,很高兴能帮上忙。但我必须指出你代码中的一个错误。无论请求的来源如何,代码的if块都将始终执行,因为只要“btnCheck”存在,它的计算结果将始终为true。为了更好地理解这一点,我希望您尝试一下:创建一个新的asp按钮并为其创建一个触发器。现在,当您单击此新按钮时,您将看到警报仍会显示,而它只应显示为“btnCheck”。请检查我关于如何适当处理此问题的最新答案。旧的if逻辑可能不适用于您,但这个逻辑应该适用。
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler).
$(document).ready(function () {
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
});
function EndRequestHandler(sender, args) {
   var senderId = sender._activeElement.id;
    if (senderId=="btnCheck") {
        alert($('#<%=hiddenResult.ClientID%>').val());
    }
}
function EndRequestHandler(sender, args) {
   var senderId = sender._postBackSettings.sourceElement.id;
    if (senderId=="btnCheck") {
        alert($('#<%=hiddenResult.ClientID%>').val());
    }
}
  $(document).ready(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    });

    function EndRequestHandler(sender, args) {
        if (document.getElementById('btnCheck')) {
            alert($('#<%=hiddenResult.ClientID%>').val());
        }
    }