0

私はasp.netにかなり慣れていないので、ウェブサイトを作成しようとしています。default.aspx.cs で宣言されたイベント ハンドラーにアクセスする必要がある AppCode/GSA のクラスがあります。誰でもそれを助けることができますか?私はそれについて検索しようとしましたが、そのクラスのインスタンスを作成した後の classname.methodname() のような標準的なメソッド呼び出ししか得られませんでした。ここで私を助けてください。

これが私がやりたいことであり、default.aspx.cs でメソッドを呼び出す必要がある理由です。

GSA 関数を呼び出して、プレースホルダーに検索結果を表示するために使用している html 文字列を作成しています。それは完全にうまく機能します。今、表示されるすべての検索の前にボタンを追加しています。ユーザーがこのボタンをクリックすると、そのボタンはテキストフィールドに置き換えられ、その検索結果の小さな URL が含まれます。

今、すべての結果が表示されたボタンを取得しています。そのボタンにイベント ハンドラーを割り当てる必要があります。そのイベント ハンドラーを GSA.cs ファイル自体に配置しようとしましたが、そのイベント ハンドラーを defalut.aspx.cs に配置することにした理由がデフォルトで定義されていないため、その関数は呼び出されません。

4

4 に答える 4

2

一般的に言って、イベントハンドラーは、クラス間で共有する必要のある種類のものではありません。2つの場所で同じ機能を使用する必要がある場合は、その機能を独自のメソッドに引き出し、イベントハンドラーでそのメソッドを呼び出します。

private void MyEventHandler(object sender, EventArgs e)
{
    // some complex functionality
}

次のようになります。

public void DoComplexFunctionality()
{
    // some complex functionality
}

private void MyEventHandler(object sender, EventArgs e)
{
    DoComplexFunctionality();
}

「どこに置けばいいのDoComplexFunctionality()?」という質問。それが何をするかについての詳細を知っている誰かによってのみ意味のある答えができるものです。静的クラスのメンバーにすることができます。これにより、そのクラスを表示できるすべてのコードにアクセスできるようになります。または、特定の値のセットを変更する責任がある場合は、それらの値をカプセル化するクラスのインスタンスメンバーにして、メソッドを呼び出す必要がある人にそのクラスのインスタンスを渡すことができます。

いずれにせよ、イベントハンドラーを直接呼び出そうとするのは道のりではありません。

于 2011-09-02T16:10:36.140 に答える
1

Default.aspx.csを他のすべてのクラスと一緒にAppCodeフォルダーにドラッグし、Default.aspxのパスを次のように変更します 。これで、他のクラスと同じようにアクセスできるようになります。CodeFileCodeFile="~/App_Code/Default.aspx.cs"

于 2011-12-08T18:04:03.923 に答える
1

他のコードからイベント ハンドラーを呼び出してはいけません。

十分な情報はありませんが、これを行う必要があると思われる 2 つのシナリオを思い描くことができます。それは、共通ページのシナリオと共有ビジネス ロジックのシナリオです。

複数のページでコード ブロックを使用したい場合は、"Page" クラスから派生した親クラスを作成し、そこにすべての共通コードを配置することを強くお勧めします。これは主従関係と同じではありません。これは、すべてのページで使用されるコードを実装する方法にすぎません。たとえば、親クラスを使用して、厳密に型指定されたセッション クラスを管理しています。

ビジネス ロジックを共有または実装しようとしていて、たまたまそれを Default.aspx.cs クラスに既に配置している場合は、アーキテクチャを再考する必要があります。MVC アプローチを使用していない場合でも、3 層アプローチを使用して最も単純なサイト以外のすべてのサイトにアプローチすることを強くお勧めします (一度実行すると、追加の作業は簡単になります)。この場合、ビジネス ロジックを実装するクラスを作成し、分離コード コードのみを UI 作業に使用します。したがって、典型的なコード ビハインド メソッドは、UI から何かを取得し、ビジネス ロジック クラスを作成してそれを渡し、結果を処理します (またはその逆)。この場合、共有したいコードを実装するビジネス ロジック クラスを、テスト クラスを含め、どこからでも呼び出すことができます。

于 2011-09-02T16:14:11.980 に答える
0

これは、あなたの望むことですか?

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string a = Class1.ctest();
        Response.Write(a);
    }
}

App_Code/Class1.cs 内

using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    public Class1()
    {

    }
    public static string ctest()
    {
        string test = "I need this";
        return test;
    }
}

更新 (OP によって要求されたコード): Default.aspx.cs:

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    string a = pick();
    Response.Write(a);
    }
    protected string pick() 
    { 
    string test = "I need this";
    return test;
    }
    }
于 2011-09-02T16:09:52.997 に答える