0

ASPX ページ要素を操作するメソッドがたくさんありますが、この時点でそれらを独自の静的オブジェクトにカプセル化することは理にかなっています。ただし、ASPX ページ外のフォーム要素にアクセスできないようです。これをどうやって進めるかについてのアイデアはありますか?

4

3 に答える 3

1

Page 自体をクラスに渡す必要があります。以下の例を参照してください。

ASPXページ

<form id="form1" runat="server">
<div>
    <asp:TextBox ID="txtTest" runat="server" Text="Test" />
</div>
</form>

コードビハインド

    protected void Page_Load(object sender, EventArgs e)
    {
        Process p = new Process(this);
        string s = p.GetTextBoxValue();
    }

クラス

    public class Process
    {
        public Page thePage { get; set; }

        public Process(Page page)
        {
            thePage = page;
        }

        public string GetTextBoxValue()
        {
            TextBox tb = (TextBox)thePage.FindControl("txtTest");
            return tb.Text;
        }

    }

Process はおそらくクラスの名前として最適ではありませんが、これは純粋にデモです。

また、Page オブジェクトを別のクラスに渡すと、そのクラスと Page オブジェクトが密結合します。Page オブジェクトに完全に依存しないように、作成しようとしているクラスの設計を再検討することをお勧めします。

于 2012-06-20T21:55:27.130 に答える
0

本当に機能をカプセル化したい場合は、関連する要素をコンストラクターに渡すクラスを作成するのが最善だと思います。

他のページでの再利用を目指している場合は、継承元のベース ページを作成できます。別のオプションは、ページから参照するマスター ページで何かを行うことです。

より詳細な回答を得るには、より詳細な質問が必要だと思います。

于 2012-06-20T21:50:55.960 に答える
0

Page オブジェクトをパラメーターの 1 つとしてクラス メソッドに渡す必要があります。これにより、その要素がクラス内でアクセスできるようになります。

たとえば、次のようなクラスがあるとします。

public class CMyDataClass {
   public bool CompareText(System.Web.UI.Page i_oPage) {
      TextBox oTextBox = i_oPage.FindControl("TextBox1");
      return (oTextBox.Text == "My Data");
   }
}

ページから次のように使用できます。

CMyDataClass oMyDataClass = new CMyDataClass();

if (oMyDataClass.CompareText(this)) {
    Response.Write("Ok!");
}
于 2012-06-20T21:44:45.193 に答える