Инициализация атрибутов пользовательского контрола
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Инициализация атрибутов пользовательского... Expand / Collapse
Автор
Сообщение
03.05.2007 10:39


Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 16.05.2007 18:38
Сообщ.: 68, Visits: 382
Помогите, пожалуйста, разобраться.

Есть собственный контрол, в котором атрибут:

public string currency

{

    get

    {

        return m_strCurrency;

    }

    set

    {

        m_strCurrency = value;

    }

}

Если я его вставляю на странице так:

<MyControls:PriceItem currency="WMZ" runat="server" />

То все получается хорошо.

Если пытаюсь ему передать ранее полученного значение переменной, то ничего не выходит:

 <MyControls:PriceItem currency="<%=strValue1%>" runat="server" />

Переменная strValue1 однозначно объявлена как string и проинициализирована в фоновом коде этой страницы.

Что не так?

Сообщ. #912938
03.05.2007 11:26
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Такой синтаксис недопустим. Блок <%=%> выполняется в момент рендеринга страницы, а объекты на странице создаются раньше. Присваивай значение своему контролу из кода страницы.
Сообщ. #912940
03.05.2007 12:14


Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 16.05.2007 18:38
Сообщ.: 68, Visits: 382
Вот так вот:

<script language="C#" runat="server">

public PriceItem Item1;

Item1.currency = strValue1

</script>

Не получилось :-(

Пишет:

Invalid token '=' in class, struct, or interface member declaration
Сообщ. #912947
03.05.2007 12:24


Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 16.05.2007 18:38
Сообщ.: 68, Visits: 382
Пардон, торможу :-)

Вот этот код работает:

<%

Item1.currency = strCurrency;

%>

<MyControls:PriceItem ID="Item1" runat="server" />

Сообщ. #912949
03.05.2007 12:26
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Подобный код (Item1.currency = strValue1) должен находиться внутри какой-нибудь функции. На уровне класса можно инциализировать только поля класса, но не поля полей.
Сообщ. #912951
03.05.2007 12:42


Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 16.05.2007 18:38
Сообщ.: 68, Visits: 382
О, да, точно! Функция - это красиво и стройно.

Вот этот код работает:

<script language="C#" runat="server">

    public void InitPriceItem(PriceItem Source, Int16 iPrice)

    {

        Source.currency = strCurrency;

        Source.price = iPrice;

    }

</script>

На странице:

<%
InitPriceItem(Item1, iPrice);
%>
<MyControls:PriceItem ID="Item1" runat="server" />

 

Сообщ. #912952
03.05.2007 13:04
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Не понимаю зачем ты делаешь вызов из кода страницы в блоке <% %>. Не лучше ли перенести этот вызов в событие Load страницы? Ведь наверняка iPrice иницилизируется у тебя там же.
Сообщ. #912955
03.05.2007 13:18


Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 16.05.2007 18:38
Сообщ.: 68, Visits: 382
Ну, я еще не вполне разобрался с пользовательскими контролами.

Load у меня, действительно обрабатывается в фоновом коде страницы и там все переменные инициализируются.

На странице, где вставляются контролы я написал так:

<%@ Register TagPrefix="MyControls" TagName="PriceItem" Src="PriceItem.ascx" %>

А как работать с этим контролом в фоновом коде страницы еще не разобрался :-) как подключить, объявить и т.п.

Сообщ. #912956
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin