2011-11-12 19 views
0

私はASP.NET 4を使用して、jQuery UI Sortable pluginで使用される要素を持つページを作成しています。ASP.NETはポストバックを引き起こしたボタンをどのように知っていますか?

これらすべての要素には、SubmitButtonという名前のボタン(送信ボタンとして実装されています)が含まれています。これらのボタンの1つを除くすべてがページのLoadイベントで非表示になります。しかし、要素を別の位置にドラッグして、そのボタンを使用してページを送信すると、ASP.NETが混乱します。

私は別のボタンをクリックしました.1つはページに表示されていないものの、移動前にクリックされたボタンの位置のコンテンツに関連付けられています。 (要素を移動しないと、正常に動作します)

これはどう起こっているのかわかりません。私が理解しているように、ASP.NETはボタンの名前と値がポストバックデータに含まれているため、どの送信ボタンがポストバックを引き起こしたかを知っています。 (__EVENTTARGETはここでは役割を果たさず、空です)どうやって別のボタンがページを送信したと思いますか?

どのようにASP.NETがページを送信したボタンを混乱させるのですか?

(申し訳ありませんが、それは公共のウェブサイト上で、このページを置くことはできません。)

+0

私は何らかのjavascriptを使用してボタンをドラッグしていると仮定しています。ボタンをドラッグした後、コントロールの名前とIDはレンダリングされたときと同じになりますか? –

+0

jQuery UI Sortableプラグインは要素の位置を変更します。要素を移動し、名前を変更しません。 –

答えて

0

私はこの問題を通じて勤務し、ここで私が見つけたものです。

まず、デフォルトでボタンは、<input>タグ(type = submit)と表示されます。この場合のポストバックメカニズムは、ASP.NETとは何の関係もありません。ポストバックデータには、とりわけ、ボタンのテキストと共にポストバックを引き起こした送信ボタンの名前(name = textの形式)が含まれます。

しかし、ASP.NETのボタン名には、デフォルトですべての親コントロールの名前が含まれています。これらのコントロールに名前を付けないと、ctl00、ctl01、ctl02などのIDが与えられます。その結果、すべてのマイボタンは一意の名前を持つことが保証されます。

問題は、これらのボタンと親コントロールがすべて動的に作成される場合です。ポストバックでは、これらのコントロールは、ロードイベントでは再作成されますが、新しいオーダーに再構築されます。順序が名前(ctl01 vs ctl02)に影響するため、これは、送信ボタンが、ページが最初にレンダリングされたときとは異なる名前を持つことを意味します。

結果、ASP.NETはポストバックをトリガするために使用される送信ボタンに関連付けられた間違った名前を認識します。

+0

MVCに切り替えるもう一つの理由:) –

+0

私は同意しません。私たちはそれをやっている最中です。 –

関連する問題