首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在asp:UpdatePanel中不回发asp:HiddenField

在asp:UpdatePanel中不回发asp:HiddenField
EN

Stack Overflow用户
提问于 2014-08-20 08:05:36
回答 5查看 1.4K关注 0票数 0

我有以下情况:

.ascx:

代码语言:javascript
复制
 <script type="text/javascript">
  $(document).ready(function () {
        $('.onoffswitch-checkbox').change(function () {
            if ($(this).is(":checked")) 
                $('#hf').val(1);
            else
                $('#hf').val(0);
        });
  });
 </script>

 <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
 <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="hf"/>
        </Triggers>
        <ContentTemplate>
              <input type="checkbox" class="onoffswitch-checkbox">
              <asp:HiddenField ID="hf" runat="server" Value="0"/>
              <asp:Label ID="label" runat="server" Text=""></asp:Label>
        </ContentTemplate>  
 </asp:UpdatePanel>

.vb:

代码语言:javascript
复制
Protected Sub hf_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles hf.ValueChanged

    label.Text = "something..."

End Sub

JS函数在选中或未选中HiddenField之后更改CheckBox的值,但是HiddenField的ValueChaneged事件不会触发。我试着用asp:PostBackTrigger -也没有效果,你能看到错误吗?

编辑:

我还试图在控件中声明该方法:

.ascx:

代码语言:javascript
复制
<asp:HiddenField ID="hf" runat="server" Value="0" OnValueChanged="hf_ValueChanged"/>

.vb

代码语言:javascript
复制
 Protected Sub hf_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) 
        label.Text = "something"
 End Sub

没有效果。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-22 07:05:09

因此,经过两天的实验,我找到了以下解决办法。它不是很漂亮,但它的工作方式,我想。

我不确定,但我认为JS只会在客户端站点上更改隐藏字段的值,而服务器不会看到更改,事件也不会被触发。

首先,我从js手动调用回发:

代码语言:javascript
复制
function changeHFValue(element) {
  if ($(element).is(":checked")) 
     $('#<%= hf.ClientID %>').val(1);
  else 
     $('#<%= hf.ClientID %>').val(0);
   __doPostBack('UpdatePanel1', ''); //postback
}

ascx:

代码语言:javascript
复制
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always" EnableViewState="true">
    <ContentTemplate>
        <asp:HiddenField ID="hf" runat="server"/>
        <input type='checkbox' onchange='changeHFValue(this);' id='cb'/>   
        <asp:Label ID="label" runat="server" Text=""></asp:Label>
     </ContentTemplate>  
</asp:UpdatePanel> 

现在是由于回发而触发的事件,它进入.vb中的方法:

代码语言:javascript
复制
 Protected Sub hf_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles hf.ValueChanged
    If hf.Value Then
        label.Text = "something"
    Else
        label.Text = "something else"
    End If
 End Sub  

新的问题是,当重新加载UpdatePanel时,总是在回发后不选中复选框。解决方案是查看HiddenField:

代码语言:javascript
复制
$(document).ready(function () {
   // bind your events here initially
   bind();
});

var prm = Sys.WebForms.PageRequestManager.getInstance(); // Page request manager

prm.add_endRequest(function () {
    // re-bind your events here after postback
    bind();
});

function bind() {
    if ($('#<%= hf.ClientID %>').val() == 1) 
       $('#cb').prop('checked', 'checked');
    else 
       $('#cb').prop('checked', '');
} 
票数 1
EN

Stack Overflow用户

发布于 2014-08-20 08:19:51

当您拥有事件方法上的UpdatePanel时,Response.Write("")将无法工作。若要更改UpdatePanel中元素的值,请尝试使用以下内容:

代码语言:javascript
复制
hf.Value="something";
票数 1
EN

Stack Overflow用户

发布于 2014-08-20 08:27:29

亲爱的,您需要在隐藏字段中添加OnValueChanged属性并声明方法名,然后它将触发单击事件。

代码语言:javascript
复制
<asp:HiddenField ID="hf" runat="server" Value="0" OnValueChanged="hf_ValueChanged"/>


void hf_ValueChanged(Object sender, EventArgs e)
{
    // Display the value of the HiddenField control.    
    string _strHDFValue = hf.Value;
    Response.Write("something...")    
}

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25399689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档