我正在尝试更新页面上的所有TextBox,将它们转换为标签,如下所示:
foreach (Control ctrl in masterform.Controls)
{
if (ctrl.GetType() == typeof(TextBox))
{
TextBox t = ctrl as TextBox;
t.ReadOnly = true;
t.BackColor = transparent;
t.BorderWidth = 0;
}
}
不幸的是,我包含了所有带有更新面板的文本框,无法再访问它们。所以我试过这个:
foreach (Control ctrl in masterform.Controls)
{
if (ctrl is UpdatePanel)
{
UpdatePanel s = ctrl as UpdatePanel;
if (s == PartPanel)
{
foreach (Control ctrl2 in s.Controls)
{
if (ctrl2 is TextBox)
{
TextBox t = ctrl2 as TextBox;
t.ReadOnly = true;
t.BackColor = transparent;
t.BorderWidth = 0;
}
}
}
}
}
这只是将面板控制计数显示为1,但内部有很多文本框控件。任何帮助将不胜感激。
此外,我有相互排斥的复选框,如下所示:如果选中#1,则无法检查#2或#3,如果选中#2或#3,则无法检查#1。这意味着,如果选中#2和/或#3并且用户检查#1,#2和#3变为未选中状态,并且如果选中#1并且用户检查#2和/或#3,则#1变为未选中状态。我编写了以下函数来处理它,只要更新面板不更新它就可以工作:
var objChkd;
$(document).ready(function()
{
$('.mutuallyexclusive1').click(function ()
{
checkedState = $(this).attr('checked');
$('.mutuallyexclusive2:checked').each(function ()
{
$(this).attr('checked', false);
});
$(this).attr('checked', checkedState);
});
$('.mutuallyexclusive2').click(function ()
{
checkedState = $(this).attr('checked');
$('.mutuallyexclusive1:checked').each(function ()
{
$(this).attr('checked', false);
});
$(this).attr('checked', checkedState);
});
});
<input id="Chk1" type="checkbox" runat="server" class="mutuallyexclusive1" /><br />
<input id="Chk2" type="checkbox" runat="server" class="mutuallyexclusive2" /><br />
<input id="Chk3" type="checkbox" runat="server" class="mutuallyexclusive2" /><br />
问题是,当页面加载时,它们工作正常但如果调用更新面板的update()函数,它们似乎失去了与它们应该调用的javascript的连接。再次,任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
对于您的UpdatePanel,请尝试以递归方式查找文本框并更新它们:
void DisableTextBoxes(Control parent)
{
foreach (Control ctrl in parent.Controls)
{
TextBox t = ctrl as TextBox;
if (t != null)
{
t.ReadOnly = true;
t.BackColor = transparent;
t.BorderWidth = 0;
}
else
{
DisableTextBoxes(ctrl);
}
}
}
DisableTextBoxes(masterform);
对于复选框,您的脚本在页面加载时执行,此时事件处理程序绑定到控件。如果复选框是更新的DOM的一部分,而在UpdatePanel
刷新期间没有完整页面重新加载,则事件处理程序不再绑定到它们(它们是新元素)。部分刷新页面后,您需要再次绑定事件。