Вызов функции в встроенном коде usercontrol не всегда работает - PullRequest
2 голосов
/ 15 декабря 2011

Я создал пользовательский элемент управления ASP.NET "Box.ascx" со следующим кодом.

<div id="divContent" runat="server" visible='<%# AllowedToView(this.Privacy) %>'>
    Content
</div>

В коде «Box.ascx.cs» есть следующий код.

public string Privacy = string.Empty;
public bool AllowedToView(string privacy)
{
    return true;
}

Когда я использую этот элемент управления в репитере, срабатывает функция AllowedToView (). Если я использую этот элемент управления без повторителя, функция AllowedToView () не вызывается. Я хочу знать, почему происходит эта странная ситуация и как заставить элемент управления вызывать функцию AllowedToView () при использовании без повторителя.

Подробности приведены ниже.

Я использую этот элемент управления в повторителе в "Default.aspx".

<asp:Repeater ID="rpRecords" runat="server">
    <ItemTemplate>
        <uc1:Box ID="myBox" runat="server" RecordID = '<%# Eval("RecordID") %>' />
    </ItemTemplate>
</asp:Repeater>

Повторитель привязан к базе данных в «Default.aspx.cs» со следующим кодом:

DataTable dt = FillTable();
rpRecords.DataSource = dt;
rpRecords.DataBind();

Я использую элемент управления «Box.ascx» в «ShowBox.aspx» со следующим кодом.

<body>
    <uc1:Box ID="myBox" runat="server" />
</body>

Я передаю значения пользовательскому элементу управления из следующего кода:

protected void Page_Load(object sender, EventArgs e)
{
    myBox.RecordID = "1";
}

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Как уже упоминалось в другом ответе, # означает, что для выполнения потребуется привязка данных.

Поэтому, чтобы ответить на ваш вопрос «Как заставить его работать вне повторителя», простой ответ - позвонить myBox.DataBind().

Ваш вопрос очень похож на встроенный код asp.net <% # MyboolVal%> .Проблема в том, что <% = равно Response.Write и выводит прямой HTML, поэтому он не будет работать при установке свойства visible. </p>

1 голос
/ 15 декабря 2011

Я не думаю, что вам нужно #, но вместо этого = в теге ASP. Я уверен, что # предназначен только для событий привязки данных, и поэтому он работает в ретрансляторе, потому что ретранслятор выполняет привязку данных для рендеринга.

Проверьте эту ссылку: http://blogs.msdn.com/b/dancre/archive/2007/02/13/the-difference-between-lt-and-lt-in-asp-net.aspx

0 голосов
/ 15 декабря 2011

Я не эксперт по веб-формам, но я думаю, что ваша проблема в том, что вы пытаетесь связать этот метод с данными, и он не работает для вас, попробуйте поместить его в <% = AllowedToView (this.Privacy)%>

...