0

divがクリックされた後、asp.netを介して動的に作成される入力タイプテキストがあります:

divID.innerHtml = "<input type='text' runat='server' id='box' value='' />";

私がやろうとしているのは、divをもう一度クリックして、asp.netのテキストボックスの値を取得することです。

問題は、テキストボックスが存在しないため、その名前を使用しようとするとコンパイラがエラーを出すことです。

これを行う方法はありますか?

また、jqueryを使用して値をasp.netに渡す方法があるのではないかと考えました。

4

2 に答える 2

0

テキストボックスをとして作成するのではなくHTML、コントロールを作成してページに追加します。

IE

  ''IN VB
  Dim tb as New TextBox() with {.ID = "box", .ClientIDMode =  UI.ClientIDMode.Static }

  // In C#
  TextBox tb = new TextBox {
    ID = "box",
     ClientIDMode = UI.ClientIDMode.Static
  };

を使用ClientIDMode=Staticすると、コードビハインドで設定したIDが、.netで変更されるのではなく、HTMLにレンダリングされるIDになります。

次に、これをdivIDに追加します

   divID.Controls.Add(tb)

これで、によるポストバックでアクセスできるようになります。postbackメソッドでは、コントロールを取得する必要がありFindControlます。これは、ページ上の既知のコントロールではないためです。divIDでFindControlを使用しています。これにより、そのdiv内で、前に作成したテキストボックスが検索されます。

 ''VB
 Dim tb as TextBox = CType(divID.FindControl("box"), TextBox)

 // C#
TextBox tb = (TextBox)divID.FindControl("box");

必要に応じて呼び出すことで、JQueryを介してこのTextBoxの値にアクセスすることもできます$("#box").val()

于 2012-12-14T21:25:06.650 に答える
0

Darrenによって投稿されたような、よりASP中心のアプローチを使用することをお勧めします。

ただし、すべてのフォーム入力は、PostBack(完全または部分的)中に処理するために送信されます。

したがって、名前 box1のテキスト入力コントロールがHTMLに追加された場合(動的に、または前のリクエストから)、送信されたフォームの値には、対応するPostBackformからアクセスできます。Request.Form

string boxValue = Request.Form["box"];

これは、フォームが存在する場合にのみ、フォームで送信された値を取得することに注意してください。魔法のコードビハインドオブジェクトを作成したり、コントロールツリーに影響を与えたりすることはありません。コントロールツリーは、このPostBackのページに新しいコントロールを追加するなど、新しい値を受け取ることの副作用として変更される可能性があります。


1HTMLフォーム入力にはname属性が必要です。id属性は、HTMLフォームの送信には使用されません。また、名前属性を複製して「制御配列」にすることもできます。複数の値として送信されるこれらにアクセスするには、Request.Form.GetValues(name)を使用します。

于 2012-12-14T21:55:51.913 に答える