2009-04-02 38 views
1

たとえば、「main.aspx」のように1ページ内にボタンがある場合。そして、クリックすると、 "main.aspx.cs"のクリックされたメソッドが別の* .aspx.csページから関数を呼び出すだけでなく、その* .aspxページにリダイレクトされるようになります。異なる* .aspx.csページからのAsp.Net呼び出し関数

+0

あなたがしようとしているもののより具体的な例が、おそらくより良い答えを得るのに役立つでしょう。 Shobanはあなたの質問に対して最高の回答をしていますが、少し具体的であれば、正しいことを確実にするのに役立ちます。 – Daniel

答えて

0

クエリ文字列のパラメータでリダイレクトしてから、目的のページでその関数を実行するのはなぜですか?

+0

これは私がもともと持っていたものですが、onpageをロードすると、クエリーストリングが入力されたかどうかを調べる機能が呼び出されます。問題は、pageloadで関数を呼び出すと2回呼び出されますクエリーストリングを消去する – user84786

+0

ページをリロードせずにクエリーストリングをリセットする方法はありますか? – user84786

+0

私はエラーを試してみて、コレクションは読み取り専用だと言います。これは私が試みていることです、Request.Form.Clear(); – user84786

3

ASP.NETページのライフサイクルを理解する必要があります。なぜこれがコーシャーではないのかがわかります。複数のページからメソッドを実際に呼び出す必要がある場合、いくつかの外部クラス/オブジェクトのための良い候補のように思えます。

代わりに、クエリ文字列パラメータを使用する代わりに、セッションフラグを設定してからこの新しいページにリダイレクトすることができます。次に、そのページのメソッドを呼び出すときにセッションフラグをクリアします。

+0

+1はそれが正直ではないことを示します。セッションを使用してアクションを通信する場合は-1 –

+0

Bah、グローバル変数を使用しないと思いますか? :) – Bryan

6

あなたがしようとしているもののより具体的な例が役に立つでしょう。さもなければ、あなたはあらゆる種類の答えを得るでしょう、その多くはマークから外れるでしょう。

共通コードをApp_Codeフォルダに配置する必要があります。また、フォームのコードビハインド内にビジネスロジックを持たないようにする必要があります。

別のページでメソッドを呼び出すためにあるページを必要としているという事実は、これを行っていないことを示しています。ページはアクションを表示し解釈するためのものですが、ビジネスロジックを保持してはいけません。

ショッピングカートの不自由な例。

 
    ProductView.aspx - calls Cart.AddToCart(Product p) 
    CartView.aspx - displays all items in the cart, and the user 
        can update or remove items. 
     - calls Cart.RemoveItem(int cartIndex) 
     - calls Cart.UpdateItem(int cartIndex, int newItemCount) 

カート自体はCartView.aspxまたはProductView.aspxに属しません。それは代わりに、だからあなたのソリューションは、また

 
/(root of your web folder) 
Product/ 
      ProductView.aspx 
      ProductView.aspx.cs 

Cart/ 
      CartView.aspx 
      CartView.aspx.cs 

App_Code/ 
      Cart.cs 
      Product.cs 

のようなものを見ることができる、それはまだそこにいなかったら、App_Codeフォルダーを追加するWebプロジェクトを右クリックし、[Add ASP.NET folderを選択し、選択し~/App_Code/Cart.cs

に属しApp_Code

+0

それは理にかなっています。 Cart.cs内の機能はCartView.aspxにのみアクセスできるか、* .aspxページにアクセスできますか? – user84786

+0

〜/ App_Codeにあるものはすべてのページで使用できます。 –

1

非常に基本的な方法では、Main.aspxOther.aspxに行き、クエリーストリング上の少量のデータを渡してアクションを示します。 Other.aspx

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
    if("runAway".Equals(Request.QueryString["action"]) 
    { 
     RunAway(); 
    } 
    } 
} 

Main.aspx

protected void OnSomeButtonClicked(object sender, EventArgs e) 
{ 
    if(someCondition) 
    { 
    Response.Redirect("~/Other.aspx?action=runAway"); 
    } 
} 

またServer.Transfer versus Response.Redirect上に読んでください。どちらを使用するかは状況によって異なります。

また、QueryStringパラメータはユーザーが簡単に変更できるため、常に検証し、ユーザーを信頼することはありません。

0

他のページクラスからオブジェクトをインスタンス化し、そのメソッドを呼び出します。

protected Button1_Clicked(Sender s, Eventargs e){ 
     MyNamespace.Page_Other po = new MyNamespace.Page_Other(); 
     po.Method1(); 
     Response.Redirect("~/page_other.aspx"); 
} 
関連する問題