web-dev-qa-db-ja.com

コードビハインドから変数値を取得し、aspxページコントロールで使用します

基になるページの変数またはプロパティからのデータを供給する必要があるコントロールがあるWebユーザーコントロールを取得しました。

<%@ 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
        }
    }
}

私はこのトピックを読みましたが、それは私の問題を解決しません。これはユーザーコントロールであり、ページではないためだと思います。 コードビハインドからプロパティ値を取得したい

6
Eric Herlitz

これを解決しました、以下の解決策

この場合、Webユーザーコントロールを使用したため、通常のシナリオは機能しません。しかし、ユーザーコントロールを制御するページ、またはWebユーザーコントロールの上のチェーン内の任意のマテリアルページにデータバインドを配置することにより、コードが機能し始めました

MasterPage codebehind

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ファイル、以下のすべての推奨ソリューションが機能します

<%@ 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 %>' />

ascxのコードビハインド

namespace Site.UserControls.Base
{
    public partial class Header : UserControlBase //UserControl
    {
        public string Testing { get { return "hello world!"; } }
        public string Testing2 = "hello world!";

        protected void Page_Load(object sender, EventArgs e)
        { }
    }
}

インスピレーションをありがとう!

12
Eric Herlitz

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

<span id="ltrTesting"><%= this.Testing %></span>
7
Adam Rackis

または、コードビハインドでリテラルのTextプロパティを設定することもできます。

ltrTesting.Text = "Hello World!";

テストをフィールドではなくプロパティにしてみてください。

例えば.

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