2

複数行の選択を有効にしたいのですが、テレリック RadGrid に問題があります。また、行が選択または選択解除されるたびにサーバーにアクセスしたいと考えています。グリッドのクライアント側イベント (OnRowSelected および OnRowDeSelected) を処理する JavaScript 関数を作成しました。関数は次のようになります。

 function onOperationRowSelected(sender, eventArgs) {
            __doPostBack("<%=myControl.ClientID %>", "rowSelected:" + eventArgs.get_itemIndexHierarchical());
        }

もう 1 つの関数は非常に似ていますが、唯一の違いは、"rowSelected" ではなく "rowDeselcted" という文字列を送信することです。

Page_Load では、"IsPostBack" を使用してリクエストが Post リクエストであるかどうかを確認し、そうであれば、rowSelected または rowdeselected であるかどうかを確認します。

私の問題は、グリッドで最初の raw を選択すると Post リクエストが発生する (これは予期されることです) のですが、2 番目の行を選択すると GET リクエストが発行され、(明らかに) IsPostBack が false を返すことになります。

ここで何が欠けていますか?


編集: Request オブジェクトを確認したところ、HttpMethod プロパティの値が「POST」であることがわかりました。HTTP POST リクエストなのに、IsPostBack が false を返すのはなぜですか??

4

3 に答える 3

2

この関数は のアクションを尊重し<form>ます。__doPostBack の機能は次のとおりです。

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

したがって、フォームが設​​定されていることは何でも実行します。これは、通常、asp.net に投稿するだけです。

それで、それは可能ですか?はい、絶対に、なぜあなたのケースでそれが起こっているのか私にはわかりません。

于 2010-03-16T18:05:56.917 に答える
2

グリッドが生成するマークアップが表示されないので、javascript が適用されたクリック ハンドラーを含むリンクを使用してポストバックを実行していると思います。最も可能性の高い原因は、ハンドラーの起動を妨げている JavaScript エラーであると思います。これにより、ハンドラーが適用されるアンカー (この場合は GET) のデフォルトの動作が得られます。私ができる最善のアドバイスは、Firefox/Firebug でそれを見て、コンソールにエラーが表示されていないかどうかを確認することです。

とはいえ、javascript が無効になっている場合でも機能するようにアプリをビルドし、エラーを修正して、GET 要求が発生した場合の応答方法を理解することをお勧めします。

于 2010-03-16T18:07:00.633 に答える
1

GET リクエストに正しいイベント引数が含まれていますか?
GET リクエストを行っているものが他にあると思います。おそらく、そのグリッドによる AJAX マジック、リソース、AJAX PageMethod 呼び出し、URL 書き換えなどです。

ページ名は default.aspx ですか? 一部のブラウザー (詳細を思い出せない) で画像を取得したり (正確な状況を思い出せない) すると、ブラウザーは "samefolder/" URL にもヒットし、デフォルトのページが開きます。

FireBug でリクエストを確認し、その内容を確認してください。

于 2010-03-17T06:22:37.523 に答える