处理多个UserControl

时间:2016-09-08 13:55:26

标签: c# asp.net telerik

我有一个包含UserControl的网页重复了2次,具有相同的功能。我想在第一个UserControl中禁用文本框,但在第二个UserControl中禁用它。

如何检查?

<script type="text/javascript">
function confirmCallBackFn(arg)
{
    if (arg == true)
    {
        $find('<%= txtOne.ClientID %>').disable();
    }
}

1 个答案:

答案 0 :(得分:0)

方法1 - 如果事件由父表单中的控件触发

在用户控件中,您可以定义一个返回TextBox ID的属性:

public string TextBoxID
{
    get { return txtOne.ClientID; }
}

如果您的表单包含两个用户控件实例ctrl1ctrl2,则可以定位一个特定的实例:

document.getElementById('<%= ctrl1.TextBoxID %>').disabled = true;

注意:在用户控件中,请确保不要将ClientIDMode="Static"用于内部控件。

方法2 - 如果事件由用户控件的内部控件触发

如果您的用户控件包含以下标记:

<asp:CheckBox ID="chk1" runat="server" />
<asp:TextBox ID="txtOne" runat="server" />

您可以在用户控件的Page_Load方法中将Javascript事件处理程序添加到CheckBox:

protected void Page_Load(object sender, EventArgs e)
{
    string js = string.Format("txtBoxID = '{0}';", txtOne.ClientID);
    chk1.Attributes.Add("onmousedown", js);
    chk1.Attributes.Add("onkeydown", js);
}

这些事件处理程序设置了您可以在Javascript块中定义和使用的txtBoxID变量的值:

<script type="text/javascript">
    var txtBoxID;

    function confirmCallBackFn(arg) {
        if (arg == true) {
            document.getElementById(txtBoxID).disabled = true;
        }
    }
</script>

此方法假定在此过程中没有回发。如果发生回发,我们可能必须修改该方法并在代码隐藏中的事件处理程序中注册脚本。