2013-07-02 14 views
5

ButtonをASP.NET PanelDefaultButtonとして使用すると宣言するとどうなりますか? ASP.NETがPanelのコンテンツをdivにレンダリングし、ViewStateにたくさんのものを渡すことを理解します。レンダリングされたボタンのクリックイベントを処理するJavaScriptがViewState内にありますか?私は、ViewStateがちょうどそれだと思った - 状態についての情報。どのように機能するのですか?PanelのDefaultButtonプロパティはどのように機能しますか?

+0

ViewStateは、ASP.NETページが要求間で情報を保持するための単なる手段です(言い換えれば、あるページから別のページへのアクセス) - クライアント側のJavaScriptに影響を与えず、 –

答えて

11

あなたはViewStateについて正しくあります。ページとコントロールの値を保持するように設計されています。つまり、の状態はです。 hereを確認できます。

デフォルトのボタンについては、魔法はありません。 ENTERキーイベントをバインドするには、divにjavascriptが追加されています。

ぜひご覧ください。このコード:

<div id="panel" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'button')"> 
    <input type="submit" name="button" value="this is the button" id="button">   
</div> 

このJavaScriptはWebフォームエンジンによって生成されていますが、興味があれば、私たちは、それを探すことができます:

<asp:Panel ID="panel" runat="server" DefaultButton="button"> 
    <asp:Button ID="button" runat="server" Text="this is the button" /> 
</asp:Panel> 

はこれにレンダリングされ

function WebForm_FireDefaultButton(event, target) { 
    if (event.keyCode == 13) { 
     var src = event.srcElement || event.target; 
     if (!src || (src.tagName.toLowerCase() != "textarea")) { 
      var defaultButton; 
      if (__nonMSDOMBrowser) { 
       defaultButton = document.getElementById(target); 
      } 
      else { 
       defaultButton = document.all[target]; 
      } 
      if (defaultButton && typeof(defaultButton.click) != "undefined") { 
       defaultButton.click(); 
       event.cancelBubble = true; 
       if (event.stopPropagation) event.stopPropagation(); 
       return false; 
      } 
     } 
    } 
    return true; 
} 

現在フォーカスされているコントロールがtextareaであるかどうかを調べる方法に注目してください。これは、textareaの中のENTERは、主に新しい行であり、送信ではないためです。

関連する問題