Получить значение переменной из кода и использовать в элементе управления ASPX - PullRequest
6 голосов
/ 16 января 2012

У меня есть пользовательский веб-элемент управления, в котором у меня есть элементы управления, которые должны быть снабжены некоторыми данными из переменных или свойств базовой страницы.

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

Codebehind

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Я читал эту тему, но это не решит мою проблему, я предполагаю, что это потому, что это пользовательский элемент управления, а не страница. Я хочу получить значение свойства из кода

Ответы [ 4 ]

12 голосов
/ 17 января 2012

Решено, решение ниже

Поскольку в этом случае я использовал пользовательский веб-элемент управления, обычные сценарии не будут работать. Но, поместив привязку данных на странице, которая контролирует пользовательский элемент управления, или любую materpage в цепочке над пользовательским элементом управления, код начал работать

Код MasterPage позади

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 file, все предложенные ниже решения работ

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

Спасибо за вдохновение!

7 голосов
/ 16 января 2012

Обычно вы не можете помещать скрипты в элементы управления сервером.Но есть простой обходной путь: используйте простой HTML-элемент управления:

<span id="ltrTesting"><%= this.Testing %></span>
1 голос
/ 16 января 2012

Или вы можете установить свойство Text литерала в коде:

ltrTesting.Text = "Hello World!";
0 голосов
/ 16 января 2012

попробуйте сделать тестирование свойством, а не полем:

например,

public string Testing
{
    get { return "Hello World!"; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...