我有以下情况:
的.ascx:
<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:
Protected Sub hf_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles hf.ValueChanged
label.Text = "something..."
End Sub
JS函数在选中或取消选中CheckBox后更改HiddenField的值,但HiddenField的ValueChaneged-Event不会触发。我尝试使用asp:PostBackTrigger
- 也没有效果,你能看到错误吗?
编辑:
我还尝试在控件中声明方法:
的.ascx:
<asp:HiddenField ID="hf" runat="server" Value="0" OnValueChanged="hf_ValueChanged"/>
的.vb
Protected Sub hf_ValueChanged(ByVal sender As Object, ByVal e As EventArgs)
label.Text = "something"
End Sub
没效果。
答案 0 :(得分:1)
UpdatePanel
时, Response.Write("")
将无效。要更改UpdatePanel
中元素的值,请尝试使用以下内容:
hf.Value="something";
答案 1 :(得分:1)
亲爱的,你需要在Hidden Field中添加OnValueChanged属性并声明方法名称,然后它将触发click事件。
<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...")
}
祝你好运。
答案 2 :(得分:1)
因此,经过2天的实验,我发现了以下解决方法。它不是很漂亮,但它的工作方式与我想要的一样。
我不确定,但我认为JS仅在客户端站点上更改隐藏字段的值,并且服务器没有看到更改,因此事件未被触发。
起初我从js手动调用了一个回发:
function changeHFValue(element) {
if ($(element).is(":checked"))
$('#<%= hf.ClientID %>').val(1);
else
$('#<%= hf.ClientID %>').val(0);
__doPostBack('UpdatePanel1', ''); //postback
}
ASCX:
<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:
中的方法中 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:
$(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', '');
}
答案 3 :(得分:0)
如果以后不起作用,请将此属性添加到UpdatePanel
标记:
ChildrenAsTriggers="true"
答案 4 :(得分:0)
如果您有Page_Load
,请与Response.*
联系,如果是,则UpdatePanel
导致加载时应避免使用{。}}。