0

AutoPostBackフォームのテキスト ボックスの 1 つのプロパティを有効にしました。これは、 w3 学校によれば、Enter キーまたは Tab キーを押したときにのみポストバックをトリガーする必要があります。

__doPostBack()また、javascript プロンプトに対するユーザーの回答を考慮して、on pageLoadを呼び出しています。私がそれを行うと、Request.Form['__EventTarget']は への呼び出しで設定したものではありません__doPostBack

私にとっての本当の問題は、TextBox の AutoPostBack 属性を false に設定すると、pageload __doPostBack 呼び出しの問題がなくなることです。これは私が期待した動作ではありません。問題の原因についてのアイデアはありますか? AutoPostBack を有効にすると影響があるのはなぜですか?

コードの一部を次に示します。

asp:TextBox runat="server" ID="userName" OnTextChanged="UpdateTable" AutoPostBack="true"
script type="text/javascript"
        //![CDATA[
        var theForm = document.forms['form1'];
        if (!theForm) {
            theForm = document.form1;
        }
        function __doPostBack(eventTarget, eventArgument) {
            if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
                theForm.__EVENTTARGET.value = eventTarget;
                theForm.__EVENTARGUMENT.value = eventArgument;
                theForm.submit();
            }
        }
        //]]
/script
input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value=""
input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""
input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" 
function jsPrompt(name) {
  var ans = confirm('really follow ' + name + '?');
  if (ans) {
    __doPostBack('follow', name);
  }
}

次に、コードビハインド ページで:

if (Request.Form["__EventTarget"] == "follow")
  followPerson(Request.Form["__EventArgument"]);                

しかし、私はそれを取得し続けRequest.Form["__EventTarget"]","デバッガーで JavaScript をステップ実行しました。の直前にform.submit()、引数はありません","

4

2 に答える 2

1

わかりました...どこから始めますか。ここで何を達成しようとしているのですか?ASP.NET で Request.Form["__EventTarget"] を見る正当な理由は思い浮かびません。私がこれを見たのは、昔ながらの ASP または PHP プログラマーが初めて ASP.NET を学び、ASP.NET の基礎となるイベント駆動型モデルを完全に理解していないときだけです。

また、__doPostBack() を呼び出しているとはどういう意味ですか? これも手動で行う必要はありません。通常は発生しないポストバックを JavaScript で本当に作成したい場合は、ClientScriptManager.GetPostBackEventReference () を使用する必要があります。したがって、このメソッドを使用して TextBox を渡し、適切なポストバック コードを取得します。その後、クライアント側スクリプトのどこでも実行できます。

お役に立てれば。シナリオを誤解している場合は、コメントを追加してください。もう一度やり直します。:)

于 2010-09-08T22:59:10.913 に答える
0

使用しているコードはどこにありますか? 次のようなものを使用していることを確認してください。

var element = $get("<%= textbox1.ClientID %>");
__doPostBack(element.name, ''); // second param is command name/argument separated by $

HTH。

于 2010-09-08T18:54:09.807 に答える