2012-01-16 9 views
5

私は、下位のページから変数やプロパティからいくつかのデータを受け取らなければならないコントロールがあるWebユーザーコントロールを手に入れました。コードの背後にある変数値を取得し、aspxページコントロールで使用する

<%@ Control Language="C#" AutoEventWireup="False" CodeFile="Header.ascx.cs" Inherits="Site.UserControls.Base.Header" %> 
<asp:Literal runat="server" Text='<%# Testing %>' id="ltrTesting" /> 

私はこのトピックを読みましたが、それは文句を言わない私の問題を解決する

namespace Site.UserControls.Base 
{ 
    public partial class Header : UserControlBase 
    { 
     public string Testing = "hello world!"; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      //this.DataBind(); // Does not work 
      //PageBase.DataBind(); // Does not work 
      //base.DataBind(); // Does not work 
      //Page.DataBind(); // Does not work 
     } 
    } 
} 

分離コードは、私は、これはユーザーコントロールといないページであるからだと仮定します。 I want to get property value from code behind

+0

なぜコードの背後からコントロールに値を設定しないのですか? – Magnus

+0

@Magnusコントロールの移植性のために、もちろんオプションですが、これは最後のオプションです –

+0

ok ..移植性はどうですか? – Magnus

答えて

12

シナリオは機能しません。しかし、ユーザーコントロール、またはWebユーザーコントロール上記チェーン内のmaterpageを制御し、ページ内のDataBindを置くことによって、コードは、

マスターページの分離コード

public partial class MasterPages_MyTopMaster : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Databind this to ensure user controls will behave 
     this.DataBind(); 
    } 
} 

ASCXファイルを動作するように始めました提案されたすべてのソリューションは、以下のASCX

<%@ Control Language="C#" AutoEventWireup="False" CodeFile="Header.ascx.cs" Inherits="Site.UserControls.Base.Header" %> 
1: <asp:Literal runat="server" Text='<%# DataBinder.GetPropertyValue(this, "Testing") %>' /> 
2: <asp:Literal runat="server" Text='<%# DataBinder.Eval(this, "Testing") %>' /> 
3: <asp:Literal runat="server" Text='<%# Testing2 %>' /> 

分離コードを動作します

感謝の気持ちを!

6

通常、サーバーコントロールにはスクリプレットを配置できません。しかし、簡単な回避策があります:プレーンHTMLコントロールを使用します。

<span id="ltrTesting"><%= this.Testing %></span> 
+0

それは単純な解決策ですが、割り当てられた値がnullでない場合にのみレンダリングするカスタムWebコントロールのような、より高度なコントロールを使用したいとします。 –

+1

特定の値が割り当てられている場合のみレンダリングするWebコントロールですか?それは問題の完全な別々のセットです –

+0

アダムは、その1つはすでにカバーされ、働いている。コードビハインドからwebcontrolに値を割り当てると、すべて正常に動作します。しかしなぜなぜaspxページから変数値にアクセスするときにうまくいかないのですか? –

0

は、テストは財産ではなく、フィールドで作ってみる:

例えば

public string Testing 
{ 
    get { return "Hello World!"; } 
} 
+0

最小限の違いはありません。 –

+0

申し訳ありませんが、何も変わらない –

+0

私の言い訳は、いくつかの作業をした後、解決策の一部であることが判明しました。 +1! –

1

それとも背後にあるコードでリテラルのTextプロパティを設定できます

私はこのケースでは、通常のWebユーザーコントロールを使用しているので

以下この、解決策を解決

ltrTesting.Text = "Hello World!"; 
+0

本当ですが、私はそのようなコードビハインドからアクセスしたくありません:) –

関連する問題