2012-02-10 3 views
0

こんにちはfroms。負荷Webフォームは、だから私は、マスターページ内の開口部のウェブフォームのアカウント」を持っている私は1つのWebフォームのdiv/</p> <p>内のWebフォームをロードする方法のdiv

私のアカウントのWebフォームには、ユーザーがアカウントページ内に別のWebフォームをロードするためにクリックしたときに必要なメニューがあります。

私はASP.NET C#を使用しています。

申し訳ありません。あなたはこのサーバー側をしたい場合は

おかげ

+0

iFrameで2番目のページ/フォームを開くことができます。これは、メニューでオプションをクリックすると、JavaScriptを介してトリガされます。 – Zachary

+0

マスターページのネストの代替方法もあります。あなたはaccountMasterを持つことができ、他のページはaccountmasterをそのマスターページとして使用します – peroija

答えて

2

が、これは実際のページ対フォームにユーザーコントロールのインスタンスをロードすることによって達成することができます。 Click here to see an MSDN exampleを使用してください。ポストバックを管理するには、必ず更新パネルを使用してください。

あなたは、このクライアント側をしたい場合は、AJAXを介して、そうと、このクライアント側を管理するにASHX(ハンドラファイル) を呼び出すことができます。

あなたのaspxファイル内の次の行を追加します。

内ヘッダ本体

<body> 
    <form id="form1" runat="server" > 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <div> 
     <div id="panel" > 
     <p>stuff here</p> 
     </div> 
     <p><%= DateTime.Now %></p> 
     <div id="div1" class="slide"> 
      <p class="btn-slide">Expand Panel</p> 
     </div> 
     <br /> 
     <asp:Button Text="Click me" ID="clickButton" runat="server" /> 

     <div id="loadcontrol1" /> 

    </div> 
    </form> 
</body> 

<script type="text/javascript"> 
     $(function() { 
      $("#panel").hide(); 
     }); 
     $(document).ready(function() { 
      $(".slide").click(function() { 
       $("#panel").show("slow", false); 

       jQuery.ajax({ 
        type: "POST", 
        url: "controlloader.ashx", 
        dataType: "html", 
        success: function (response) { 
         jQuery('#loadcontrol1').append(response); 
        }, 
        error: function() { 
         jQuery('#loadcontrol1').append('error'); 
        } 
       }); 

      }); 

     }); 
</script> 

そして

次に、あなたASHXファイル内の

public class controlloader : IHttpHandler 
    { 
     //If annonymous id is turned on IRequireSessionState Interface may be needed to write session variabled such as user auth. 
     // Generic handlers by default implementIReadOnlySessionState 
     public void ProcessRequest (HttpContext context) 
     { 
      context.Response.ContentType = "text/plain"; 
      context.Response.Write(RenderPartialToString("~/Control1.ascx")); ; 
     } 

     private string RenderPartialToString(string controlname) 
     { 
      Page page = new Page(); 
      Control control = page.LoadControl(controlname); 
      page.Controls.Add(control); 

      StringWriter writer = new StringWriter(); 
      HttpContext.Current.Server.Execute(page, writer, false); 

      return writer.ToString(); 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 

また、ユーザーコントロールファイルを作成する必要がありますが、私はあなたにそのコードを残しておきます。 この例ではいくつかのことが起こっています。このボタンは、制御が再ロードされないように、ポストバックを確認するために使用されます。あなたが必要としないアニメーションも追加しましたが、これは私が以前から持っていた概念実証済みのものでしたので、そのコードを無視することができます。

私はあなたがより可能性が高いとのjsファイルにはJavaScriptを考慮して、スクリプトマネージャを使用して、それをロードすることを確認したいでしょうので、あなたはマスターページのユーザーを述べ知っている:これは

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
     <Scripts> 
      <asp:ScriptReference Path="~/js/jquery-1.7.js" /> 
      <asp:ScriptReference Path="~/js/yourcontrolloader.cs" /> 
</scripts> 
</asp:ScriptManager> 

それ以外の場合は、サーバー側で参照が失われ、スクリプトが呼び出されないため、マスターページを使用する場合に必要です。また、実際のページとマスターページの部分参照を使うこともできますが、これはあなた次第です。

運が良ければ

関連する問題