VIDTAKER.COM

Q&A

ASP.NETでのマークアップからの私の分離コードクラスのプロパティにアクセスする最善の方法


これは質問馬鹿かもしれない実際に私がNETを。私の学習なので、私は無知ですかなり...

Let 'sは、私は2つのファイルのdefault.aspxと関連付けられているdefault.aspx.csを持っている。

default.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
        {
                 var myObject = new MyObject();
        }

ある方法は、私のような何かができるのdefault.aspxで:

<%= myObject.SomePropertyOfThisObject%>

...またはdatabindersか何かをこのような複雑な使用しなくても似たような、?そして、もし方法がないデータバインディングの周りだ何が最善の方法はそれを行うにでしょうか?



4 Replies

1)

することができますが、それを別のビットを行う必要があります。あなたのdefault.aspx.csでは、メンバを追加:

protected MyObject _myObject;

次に、Page_Loadで:

    protected void Page_Load(object sender, EventArgs e)
    {
             _myObject = new MyObject();
    }

次に、Default.aspxの場合は、行うことができます:

<%= _myObject.SomePropertyOfThisObject %>

もちろん、これはそのクラスMyObjectにを想定してプロパティを恐ろしい名前しています。それがプロパティを恐ろしい名前がないので、あなたは、あなたがいない、System.Objectクラスを意味しませんでした。


方法から最善についての質問があった質問、私はさらに行くつもりです。方法は、私が示した最高のではない。最高のより頻繁にバインディング式のデータを使用することです。これらの場合は好きではない場合、あなたは分離コードで物事を設定することができます:

    protected void Page_Load(object sender, EventArgs e)
    {
             _myObject = new MyObject();
            //
            _myLabel.Text = _myObject.SomePropertyOfThisObject;
    }

と仮定すると:

<asp:Label runat="server" id="_myLabel" />

2)

それは公共のアクセスは、スコープ内にあるする必要はありませんか?

..

public var myObject = null;
protected void Page_Load(object sender, EventArgs e)
{
  myObject = new Object();
}

3)

<%= ... %の>は、ASPX短期手ですResponse.Write( .... )

あなたはのmyObject強く型(オブジェクトとしてタイプするだけではなく)することができます特定の使用目的の行をすることに変更した場合:

<%= myObject.Awesome %>

値を出力する。

注意ただし、くださいその=構文は限界がある<% - 具体的に:

  • それは、HTML内で使用することはできません値として属性
  • これは、サーバー側の要素を発することができない
  • それは、ASP UpdatePanels内で使用することはできません - ときには、部分的なポストバックを実行例外を取得します

あなたは、おそらく方が良いあなたにLabelコントロールをページの作成であり、プログラムの設定Text値にプロパティです。これは、あなたの値から文字列への変換が実行される方法をより細かく制御できます。正しくパネルコントロールを更新していきます。


4)

いずれかを、あなたが直接ASPXファイルで行うのではなく、したいのですが分離コード符号化することができます。だから、私はあなたがしたいと思う達成するには、あるだろう...

<some html>

<% var MyObject = new MyObject();
   Response.Write(myObj.Awesome()); %>

<some html>

お勧めできませんしかし、これは本当にです。これは、何か良い建築の基礎である、マークアップから、あなたのコードを分離するため分離コードが示唆"ベストプラクティス"物事の方法です。私はジョンサンダースの順序でデータバインディングを避けるに投稿さどのようなものを使用してお勧めしますが、あなたは本当に分離コードではなく、ライフサイクルイベントを使用して直接HTMLにオブジェクトのプロパティを出力する、コントロールを操作する検討すべきである。たとえば、あなたが出力テキストの一部を、としていた場合、そのような何かを

var literal = new LiteralControl(myObject.Awesome());
myPanel.Controls.Add(literal);