2016-09-08 20 views
0

私は同じ機能を持つUserControlを2回繰り返したWebページを持っています。最初のUserControlでテキストボックスを無効にしたいが、2番目のUserControlで無効になっている。複数のUserControlsを扱う

これを確認するには?

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

+1

両方のコントロールにID txtOneがありますか? –

+0

はい、それがUsercontrol –

+1

に含まれているため、親コントロールでそれを参照します。 ParentControl.UserControl.ID –

答えて

0

方法1 - イベントが親フォームユーザーコントロールで

における制御によってトリガされた場合は、テキストボックスのIDを返すプロパティを定義することができます。

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

フォームにユーザーコントロールの2つのインスタンス、ctrl1ctrl2が含まれている場合は、

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

注:ユーザーコントロールでは、あなたが内部統制のためのClientIDMode="Static"を使用していないことを確認してくださいあなたは、このような特定のものをターゲットにすることができます。

方法2 - イベントは、ユーザーコントロールの内部制御によってトリガされた場合ユーザーコントロールは、次のマークアップが含まれている場合

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

あなたにJavascriptのイベントハンドラを追加することができますがユーザコントロールのPage_Loadメソッドの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); 
} 

これらのイベントハンドLERはあなたがあなたのJavascriptのブロックで定義して使用することができますtxtBoxID変数の値を設定します。

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

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

この方法は、プロセスの間に何のポストバックがないことを前提としています。ポストバックが発生した場合、そのメソッドを修正し、コードビハインドのイベントハンドラにスクリプトを登録する必要があります。

+0

どこでどのように私はctrl1とctrl2を作成することができます。あなたはこれにいくつかの光を投げてください。 –

+0

'ctrl1'と' ctrl2'は、フォーム内のユーザーコントロールの各インスタンスのIDになります。 – ConnorsFan

+0

私の側からは難しい質問があります。子コントロールにconfirmCallBackFnを追加していて、親コントロールからusercontrolsの名前にアクセスできます。 usercontrolの中にいるので、どのように私はusercontrolsの名前にアクセスできますctrl1とctrl2。子コントロールからの確認をクリックすると、私はctrl1またはctrl2を取得する必要があります。 –

関連する問題