Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ASP.NET и C#  (Прочитано 13590 раз)
0 Пользователей и 1 Гость смотрят эту тему.
TomKa_t
Гость
« : 27-10-2005 07:03 » 

Здравствуйте, если кто-нибудь может помогите. У меня есть страница default.aspx, которая "состоит из нескольких контролов" - header.ascx, menu.ascx, footer.ascx. В контроле header.ascx - имеется label.
Как сделать так, чтобы при событии (нажатии ссылки) в menu.ascx, в контроле header.ascx значение label'а менялось.
Пробовала унаследовать их от одного класса, в котором объявила этот label и прописала след. событие в файле menu.ascx:

void ChooseMenuItem(Object sender, System.EventArgs e)
 {
   lblCurrentSection.Text="Other thing";
 }

Но результата не добилась.
« Последнее редактирование: 15-12-2007 16:07 от Алексей1153++ » Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #1 : 27-10-2005 07:18 » 

Здравствуйте, если кто-нибудь может помогите. У меня есть страница default.aspx, которая "состоит из нескольких контролов" - header.ascx, menu.ascx, footer.ascx. В контроле header.ascx - имеется label.
Как сделать так, чтобы при событии (нажатии ссылки) в menu.ascx, в контроле header.ascx значение label'а менялось.
Пробовала унаследовать их от одного класса, в котором объявила этот label и прописала след. событие в файле menu.ascx:

void ChooseMenuItem(Object sender, System.EventArgs e)
 {
   lblCurrentSection.Text="Other thing";
 }

Но результата не добилась.
Не уверен что правильно понял задачу, но...
Допустим всё у тебя находится в нэймспэйсе
Код:
namespace MainNameSpace
Допустим в контороле  header.ascx у тебя объявлен такой класс :
Код:
public Header : System.Web.UI.UserControl
объявляем внём лэйбл :
Код:
public System.Web.UI.WebControls.Label  Label1;
Далее в default.aspx например в Page_Load создаём объект контрола :
Код:
private void Page_Load(object sender, System.EventArgs e)
{
    MainNameSpace.Header test = new MainNameSpace.Header();
    tst.Label1.Text = "BLABLABLA"; // вот тут мы уже имеем доступ к лэйблу контрола и можем юзать его проперти
}
« Последнее редактирование: 15-12-2007 16:08 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
TomKa_t
Гость
« Ответ #2 : 28-10-2005 08:40 » 

Спасибо за ответ. Но у меня возникло два вопроса, не очень связанные между собой, на мой взгляд:
1) Как в самом контроле объявить пространство имен? Он у меня имеет след. Вид
Цитата
<%@ Control Inherits="TomNews.tomCtrl" Src="..\components\tomCtrl.cs" %>
<table width="100%" height="100%" cellspacing="0" cellpadding="0">
   <tr valign="top" height="19 px">
      <td background="images/titleBar6.gif" class="menu">&nbsp;
      </td>
      <td background="images/titleBar6.gif" class="menu">
         &nbsp;<asp:Label id="lblCurrentSection" runat="server" enableviewstate="false" />
      </td>
   </tr>
 </table>
<script language="cs" runat="server">
 void Page_Load(Object sender, System.EventArgs e)
 {
    if(!IsPostBack)
    lblCurrentSection.Text="First Time News";
 }
</script>

2) как в header.ascx прописать место этому label'у? То есть где будет отображаться на странице это свойство Text. Допустим я хочу, чтобы в одной из ячеек таблицы (header.ascx представляет собой таблицу). То есть мне нужно создать контрол в ячейке и дать ему такое же имя как и у label'a, который был создан как public System.Web.UI.WebControls.Label  Label1:
<td><asp:Label id="Label1" runat="server" /></td>
« Последнее редактирование: 15-12-2007 16:09 от Алексей1153++ » Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #3 : 28-10-2005 11:25 » 

1) Как в самом контроле объявить пространство имен?
У контрола есть CodeBehind файл. Вот в нём и указан нэймспэйс.

2) Не знаю (а скореепросто не понимаю что нужно)
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
TomKa_t
Гость
« Ответ #4 : 29-10-2005 07:09 » 

Извини, я новичок в этом деле, можно сказать - чайник, стремящийся стать кофейником.
Насколько я понимаю код
Код:
private void Page_Load(object sender, System.EventArgs e)
{
    MainNameSpace.Header test = new MainNameSpace.Header();
    tst.Label1.Text = "BLABLABLA"; // вот тут мы уже имеем доступ к лэйблу контрола и можем юзать его проперти
}

должен находиться в default.aspx между тэгами <script runat="server" language="cs"></script>

а как именно будет определяться местоположение Label1 на странице default.aspx? Где он у меня отобразится? То есть как прописать его местоположение - при помощи тэгов? или все это (включая тэги <script></script> надо поместить внутри ячейки таблицы, в которой именно я хочу видеть этот лэйбл.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #5 : 30-10-2005 18:18 » 

Да не должен он
должен находиться в default.aspx между тэгами <script runat="server" language="cs"></script>
Улыбаюсь
Обычно файл default.aspx имеет так называемый Code behind файл  названием default.aspx.cs
Щёлкни в дизайн моде в любом месте твоего default.aspx и выбери пункт View code и увидиш этот Code behind файл в котором уже будет метод private void Page_Load(object sender, System.EventArgs e)
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
TomKa_t
Гость
« Ответ #6 : 30-10-2005 18:48 » new

Я не очень использую VS, так сказать ручками все создаю (ну надо же учиться), с файлами я немного разобралась, с помещением label'а тоже.
У меня есть страница default.aspx, которая включает в себя три контрола header.ascx, footer.ascx, menu.ascx следующим образом:
Код:
<%@ Register TagPrefix="TOM" TagName="Header" Src="userControls\header.ascx" %>
<%@ Register TagPrefix="TOM" TagName="Menu" Src="userControls\menu.ascx" %>
<%@ Register TagPrefix="TOM" TagName="Footer" Src="userControls\footer.ascx" %>

<form runat="server" method="post">
  <table id="tableMain" class="mainTable" width="100%" height="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td colspan="2"><TOM:Header id="Header" runat="server" /></td>
</tr>
<tr>
<td><TOM:Menu id="Menu" runat="server" /></td>
<td><h3>Just some text on the page.</h3></td>
</tr>
<tr>
<td colspan="2"><TOM:Footer id="Footer" runat="server" /></td>
</tr>
  </table>
  </form>

Можно ли реализовать след.
я хочу, чтобы при нажатии кнопки в контроле меню (menu.ascx) страница default.aspx перегружалась бы и в контроле заголовка (header.ascx) в лейбле lblCurrentSection менялся текст. То есть как событие в одном контроле может повлиять на свойства компонента (lblCurrentSection.Text) в др. контроле?

в контроле menu.ascx есть событие:
Код:
 void ChooseMenuItem(Object sender, System.EventArgs e)
 {
try
{
TomNews.Header headerObject = new TomNews.Header();
headerObject.lblCurrentSection.Text = "something";
}
catch(Exception xcp)
{
lblMenuControl.Text = xcp.Message;
}
 }
при нажатии на кнопку получаю xcp.Message = "Object reference not set to an instance of an object."

таким образом я пытаюсь дать посетителю возможность ориентироваться в каком разделе он сейчас находится - смотрит в верхнюю часть там надпись типА "раздел Новостей", выбрал другой пункт меню, страница перегрузилась и в header'e теперь другая надпись типА "раздел События".

Или может я все усложняю и это делается как-то проще?
« Последнее редактирование: 15-12-2007 16:10 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines