2012-03-12 35 views
1

javascriptを使用してac#関数を呼び出したいので、Invisible asp.netボタンをDefault.aspxに追加しました。 javascriptを使用して、C#関数をトリガーしますが、 'null'はnullまたはオブジェクトではありません。問題を解決するためにjavascriptの部分を多くの場所に移動しようとしましたが、動作しませんでした。Javascript getElementByIdが 'null'がnullまたはオブジェクトではないエラーを返します

<asp:Content ID="HeaderContent" runat="server" 
ContentPlaceHolderID="HeadContent"> 
</asp:Content> 

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
     <h2>  WELCOME  </h2> 
    <div style="display: none;"> 
      <asp:Button ID="button1" runat="server" 
      OnClick="btn_SearchLibrary_Click" /> 
    </div> 

     <script type="text/javascript"> 
      function displaymessage() { 
       var button = document.getElementById('button1'); 
       button.click(); 
      } 
     </script> 


<!-- Some codes in here, below there is a gridview templatefield --> 



    <asp:TemplateField HeaderText="BookName" 
    SortExpression="BookName" ItemStyle-Width="150px"> 
           <ItemTemplate> 
            <asp:HyperLink ID="HyperLink1" 
    runat="server" Text='<%# Bind("BookName") %>' 
    NavigateUrl="javascript:displaymessage()"></asp:HyperLink> 
           </ItemTemplate> 
          </asp:TemplateField> 
+1

レンダリングされたページが古い 'ctl00'プレフィックス形式の代わりにリテラル' id'形式を使用していると確信していますか? –

+0

わかりませんが、.NET 4.0を使用していますので、古い形式にはなりません。 – HOY

+0

JavaScriptはクライアント上にあります。 c#はサーバー上にあります。 JavaScriptからC#関数を "呼び出す"ことはできません - それらは2つの異なるマシン上にあります! –

答えて

2

は、私は非常にAJAX/WCFソリューションを追求することをお勧めしますが、あなたの現在のアプローチの問題点は、最も可能性の高いIDであるこの

 document.getElementById('<%=button1.ClientID%>') 
2

これはAjax実装で解決する必要があります。この方法で、ビジネスロジックを含むWebサービスを呼び出して、クライアントに応答を返します。

  1. eqを使用してWebサービスを作成します。 (WCF、ServiceStack)
  2. ボタンを作成する
  3. jQueryを使用してボタンのクリックイベントを登録し、Webサービスに電話してください。
  4. 成功コールバック関数では、書籍のリストを更新するようなクライアント側ロジックを実行します。

敬具、

ロブ

1

を試してみてくださいボタンのASPコントロールは通常、マークアップで指定したIDでレンダリングされませんが、ASPのバージョンに応じて "ct100"または "container $ id"または "container_id"という接頭辞が付けられます。ページのソースを表示して、レンダリングされたIDを確認し、そのIDをdocument.getElementByIdに渡していることを確認することをお勧めします。

関連する問題