2009-05-21 9 views
0

おはようございます!UpdatePanelの「プレビューエリア」がリフレッシュされていません

私は、ユーザーがさまざまなラジオボタンを選択し、HTMLマークアップ(主にSCRIPTタグ)を生成し、ページ上でデータを表示することができます。 「プレビュー」領域もあり、サイト内のコードをコピー/ペーストする前に結果を見ることができます。フォームは、FormViewコントロールに存在し、そうようなのUpdatePanelでラップされる:

<script src="http://example.com/src/Constants.js"></script> 
<script> 
    showIPAddress = 0; 
    DisplayServerStatus(); 
</script> 

:このようなものに見えるかもしれない、それが正常にコピーコードテキストボックスにコードを生成

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:FormView ID="FormView1" runat="server" DataSourceId="XmlDataSource1"> 
      <ItemTemplate> 
       <div id="configArea"> 
        <ul> 
         <li> 
          <%# XPath("Steps/Step1/ServerStatus") %><br /> 
          <asp:RadioButton ID="RadioButton1" runat="server" GroupName="OneA" Checked="true" AutoPostBack="true" Text='<%# XPath("Steps/Step1/YesOption") %>' /> 
          <asp:RadioButton ID="RadioButton2" runat="server" GroupName="OneA" AutoPostBack="true" Text='<%# XPath("Steps/Step1/NoOption") %>' /> 
         </li> 
         <li> 
          <%# XPath("Steps/Step1/Uptime") %><br /> 
          <asp:RadioButton ID="RadioButton3" runat="server" GroupName="OneB" Checked="true" AutoPostBack="true" Text='<%# XPath("Steps/Step1/YesOption") %>' /> 
          <asp:RadioButton ID="RadioButton4" runat="server" GroupName="OneB" AutoPostBack="true" Text='<%# XPath("Steps/Step1/NoOption") %>' /> 
         </li> 
         <li> 
          <%# XPath("Steps/Step1/IPAddress") %><br /> 
          <asp:RadioButton ID="RadioButton5" runat="server" GroupName="OneC" Checked="true" AutoPostBack="true" Text='<%# XPath("Steps/Step1/YesOption") %>' /> 
          <asp:RadioButton ID="RadioButton6" runat="server" GroupName="OneC" AutoPostBack="true" Text='<%# XPath("Steps/Step1/NoOption") %>' /> 
         </li> 
        </ul> 
       </div> 
       <div id="copyCode"> 
        <%# XPath("Steps/Step2/CopyPasteCode") %><br /> 
        <asp:TextBox ID="Textbox1" runat="server" TextMode="MultiLine" Width="300" Height="300" /> 
       </div> 
       <div id="previewArea"> 
        <%# XPath("Steps/Step3/PreviewTitle") %><br /> 
        <asp:Literal ID="Literal1" runat="server" /> 
       </div> 
      </ItemTemplate> 
     </asp:FormView> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:XmlDataSource ID="XmlDataSource1" runat="server" XPath="Root/Data" /> 

(TextBox1テキストボックス)同時に、 "プレビュー"領域のリテラルコントロール(Literal1)をコピーコードのTextBox(TextBox1)のテキストで更新します。プレビューは、UpdatePanelの中​​にいないときは完全に表示されますが、その時には動作しません(また、ページの更新を防ぐためにUpdatePanelを使用することをお勧めします)。私は、PreRenderイベント中に「プレビュー」エリアとコピーコードのテキストの更新を行います。

protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 

    UpdateCodeSnippetAndPreviewArea(); 
} 

それはUpdatePanelの中​​にいたときにプレビューが更新されない理由を任意のアイデア?

答えて

0

UpdatePanelの使用時に更新されないのは、ASP .NET AJAXフレームワークがサーバーから返されたインラインJavaScriptを処理しないためです。サーバー側のScriptManager.RegisterStartUpScriptメソッドを使用して、インラインJavaScriptの実行を登録します。基本的には、このメソッドを使用して、パネルが更新されたらカスタムjavascriptの実行を開始することができます。あなたのカスタムjavascriptでは、プレビュースクリプトを適切に解釈する必要があります(つまり、スクリプトタグを検出し、動的に登録してから所定の関数を実行する)。

希望すると便利です。

Rohland

+0

最後の文まで続きます。あなたは詳細を教えていただけますか? – Bullines

+0

たとえば、JQueryを使用してサーバーから返されたコンテンツを再解析し、スクリプトがロード/実行されていることを確認できます。これは、独自のヘルパー機能をスクリプト化することなく、問題を解決する最も簡単な方法です。あなたのリテラルを、例えばid = 'test'というコンテナで囲みます。次に、サーバー側で: ScriptManager.RegisterStartUpScript(UpdatePanel1、UpdatePanel1.GetType()、 "mytest"、 "$( '#test').html($( '#test').html());"、真実); これは、コンテナのinnerHTMLの位置を特定し、それを再解析し、元の場所に戻します。 これが役立つことを願っています! – Rohland

+0

これはjQueryなしでも可能ですか? – Bullines

関連する問題