Доступ к переменным их контрола
От: flashion  
Дата: 17.06.05 09:20
Оценка:
Подскажите, pls:

На странице Default.aspx нужно создать переменную, например userName. Контролу, который подключен к этой старнице нужно получить эту переменную. Переменная должна жить только в течение генерирования страницы. Пробовал использовать static, но в таком виде она сохраняется при переходе на другую страницу.

Вроде простейшая задача, но никак не получается ее решить.

.NET 2.0 Beta 2
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 09:25
Оценка:
Hranite peremnnuu kak svoistvo kontrola (vnutri kontrola pomeshat' vo ViewState ili sessiu)
Re: Доступ к переменным их контрола
От: Морской дьявол  
Дата: 17.06.05 09:27
Оценка:
Или я чего то непонял или
Page_Load
{
string temp = "Value";
}
Re[2]: Доступ к переменным их контрола
От: flashion  
Дата: 17.06.05 09:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Hranite peremnnuu kak svoistvo kontrola (vnutri kontrola pomeshat' vo ViewState ili sessiu)


А нельзя как раньше в обычном ASP? Один раз переменную вверху страницы создал, а потом везде используешь? И еще, я так понимаю, Viewstate служит для передачи переменных _между страницами_?
Re[2]: Доступ к переменным их контрола
От: flashion  
Дата: 17.06.05 09:40
Оценка:
Здравствуйте, Морской дьявол, Вы писали:

МД>Или я чего то непонял или

МД>Page_Load
МД>{
МД> string temp = "Value";
МД>}

Попробуйте ее получить юзер-контролом.
Re[3]: Доступ к переменным их контрола
От: Морской дьявол  
Дата: 17.06.05 10:26
Оценка:
Здравствуйте, flashion, Вы писали:

F>Попробуйте ее получить юзер-контролом.

А... Тогда точно не понял задачу. А наоборот, встроить переменную в пользовательский контрол и задавать его значение из страницы?
Re[4]: Доступ к переменным их контрола
От: flashion  
Дата: 17.06.05 10:33
Оценка:
Здравствуйте, Морской дьявол, Вы писали:

МД>Здравствуйте, flashion, Вы писали:


F>>Попробуйте ее получить юзер-контролом.

МД>А... Тогда точно не понял задачу. А наоборот, встроить переменную в пользовательский контрол и задавать его значение из страницы?

Да! Но только не так, чтобы сделать, скажем, 10 контролов, которые будут использовать одно и то же свойство и на странице задавать это свойство для каждого контрола по отдельности, а создать свойство класса страницы, а из нужных контролов запрашивать это свойство.
Re: Доступ к переменным их контрола
От: Козьма Прутков Россия  
Дата: 17.06.05 12:20
Оценка:
Здравствуйте, flashion, Вы писали:

F>На странице Default.aspx нужно создать переменную, например userName. Контролу, который подключен к этой старнице нужно получить эту переменную. Переменная должна жить только в течение генерирования страницы. Пробовал использовать static, но в таком виде она сохраняется при переходе на другую страницу.


если только в течение генерации страницы, точнее, в течение обработки запроса, можно положить в HttpContext.

HttpContext.Current.Items["userName"] = "vasya";
...
string name = (string)HttpContext.Current.Items["userName"];


Что касается static, то могу предолжить еще поставить на нее атрибут ThreadStatic, тогда эта переменная будет статической для потока (то есть фактически для акта обработки запроса), а для разных потоков будет иметь разные значения.

В общем, вариантов масса, и все о кривизне: ну зачем так делать-то? Есть отличная штука — IPrincipal и IIdentity. У последней есть свойство Name. Все это добро лежить в HttpContext.Current.User, бери и пользуйся. Кладется туда при аутентификации пользователя.
Да хранит вас господь в сухом прохладном месте...
Re[5]: Доступ к переменным их контрола
От: Морской дьявол  
Дата: 17.06.05 13:36
Оценка:
Здравствуйте, flashion, Вы писали:

F>Здравствуйте, Морской дьявол, Вы писали:


МД>>Здравствуйте, flashion, Вы писали:


F>>>Попробуйте ее получить юзер-контролом.

МД>>А... Тогда точно не понял задачу. А наоборот, встроить переменную в пользовательский контрол и задавать его значение из страницы?

F>Да! Но только не так, чтобы сделать, скажем, 10 контролов, которые будут использовать одно и то же свойство и на странице задавать это свойство для каждого контрола по отдельности, а создать свойство класса страницы, а из нужных контролов запрашивать это свойство.

А чем просто свойство страницы неподходит?


private string temp = "Value";
public string Temp
{
  get { return temp; }
}
Re: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 18.06.05 06:28
Оценка:
Здравствуйте, flashion, Вы писали:

F>Подскажите, pls:


F>На странице Default.aspx нужно создать переменную, например userName. Контролу, который подключен к этой старнице нужно получить эту переменную. Переменная должна жить только в течение генерирования страницы. Пробовал использовать static, но в таком виде она сохраняется при переходе на другую страницу.


F>Вроде простейшая задача, но никак не получается ее решить.


F>.NET 2.0 Beta 2


В коде страницы:


public class MyPage:System.Web.UI.Page
...........
private string _userName=string.Empty;
public string UserName{
   get{ return _userName;}
}
.....
//инициализация
.........
_userName = "Vasya Pupkin";
....



В коде контрола:

....
private string _getUserName(){
   return ((MyPage)this.Page).UserName;
}
.......


Необходимо, чтобы переменная _userName была инициализирована до того, как контрол к ней обратится
-------------------------------------------

А вообще, например, у себя я делал так: при входе пользователя, я сохранял объект "Пользователь" в сессии (мне был небходим доступ ко всем полям оббъекта), а при необходимости брал информацию оттуда, где-то ASP-вставками, где-то в коде.
Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 09:46
Оценка:
System.Web.HttpContext.Current.Items поможет.
Эта коллекция существует только во время обработки запроса.

Все должно быть просто, очень просто, настолько просто — насколько это возможно!
Оренбургское сообщество .NET разработчиков
Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
RE: Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 09:42
Оценка:
Подскажите, pls:

На странице Default.aspx нужно создать переменную, например userName. Контролу, который подключен к этой старнице нужно получить эту переменную. Переменная должна жить только в течение генерирования страницы. Пробовал использовать static, но в таком виде она сохраняется при переходе на другую страницу.

Вроде простейшая задача, но никак не получается ее решить.

.NET 2.0 Beta 2
Привет, ну вроде должно вот так:


((<название класса, который содержит данный компонент>)this.Parent).userName
Важное замечание — уровень доступа к userName должен быть public, т.е.
public <тип> userName


Вот такие вот пирожкиС уважением, MEPhIst aka Миф .


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 13:33
Оценка:
Спасибо всем за ответы!

Можно ли поподробнее, что Вы имели ввиду о IPrincipal и IIdentity? Как можно их использовать для данной задачи? Не могли бы Вы все также описать, как в предыдущем примере?

Спасибо!!!!!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 13:36
Оценка:
IPrincipal и IIdentity

Вам не нужны, вы привели в качестве примера строку "userName" вот за нее и зацепились

Все должно быть просто, очень просто, настолько просто — насколько это возможно!
Оренбургское сообщество .NET разработчиков
Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 13:42
Оценка:
ааааааааааааааааааааааааааааааааа.... понятно
А я userName просто так взял.

В таком случае, использование ...Current.Items не будет считаться за кривизну?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 17.06.05 13:52
Оценка:
Можно сделать примерно такой класс и использовать внутри обработки запроса где угодно.
public class MyVariable
 {
  const string MyKey = "MyKey";
  private MyVariable()
  {}
  public static string MyVar
  {
   get
   {
    Object obj = System.Web.HttpContext.Current.Items[MyKey];
    if (obj == null)
     return string.Empty;
    return (string)obj;
   }
   set
   {
    System.Web.HttpContext.Current.Items[MyKey] = value;
   }
  }
 }



И использовать так
MyVariable.MyVar = "строка";

Все должно быть просто, очень просто, настолько просто — насколько это возможно!
Оренбургское сообщество .NET разработчиков
Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 20.06.05 05:41
Оценка:
Да, я так делал, но не получается

Ругается:
CS0246: The type or namespace name 'PageClass' could not be found (are you missing a using directive or an assembly reference?)

Объявляю класс страницы так:
public partial class PageClass : System.Web.UI.Page

Контрол вставляю так:
<%@ Register Src="App_Controls/MyControl.ascx" TagName="MyControl" TagPrefix="myTag" %>
<myTag:MyControl ID="MyControl" runat="server" />

VS 2005 мой PageClass внутри контрола даже не видит.

Что я не так делаю?
Подскажите, плиз!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 20.06.05 05:43
Оценка:
[ThreadStatic] почему-то сохраняется так же, как просто static
тоже виден всем юзерам на всех страницах

пишу так: [ThreadStatic] public static string MyVariable;


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Доступ к переменным их контрола
От: Аноним  
Дата: 20.06.05 10:17
Оценка:
[ThreadStatic] почему-то сохраняется так же, как просто static
тоже виден всем юзерам на всех страницах

пишу так: [ThreadStatic] public static string MyVariable;

Так скорее всего все ваши запросы обрабатываются в одном и том же потоке.

Да, я так делал, но не получается
Ругается:
CS0246: The type or namespace name 'PageClass' could not be found (are you missing a using directive or an assembly reference?)

Объявляю класс страницы так:
public partial class PageClass : System.Web.UI.Page

Контрол вставляю так:
<%@ Register Src="App_Controls/MyControl.ascx" TagName="MyControl" TagPrefix="myTag" %>
<myTag:MyControl ID="MyControl" runat="server" />

VS 2005 мой PageClass внутри контрола даже не видит.
Что я не так делаю?
Подскажите, плиз!


А импортировали то пространство имен в котором public partial class PageClass : System.Web.UI.Page
Туда где описан юзерконтрол?


Все должно быть просто, очень просто, настолько просто — насколько это возможно!
Оренбургское сообщество .NET разработчиков
Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Доступ к переменным их контрола
От: Козьма Прутков Россия  
Дата: 20.06.05 12:51
Оценка:
F>В таком случае, использование ...Current.Items не будет считаться за кривизну?

нет
Да хранит вас господь в сухом прохладном месте...
Re[2]: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 20.06.05 18:19
Оценка:
Здравствуйте, flashion, Вы писали:

F>Да, я так делал, но не получается


F>Ругается:

F>CS0246: The type or namespace name 'PageClass' could not be found (are you missing a using directive or an assembly reference?)

F>Объявляю класс страницы так:

F>public partial class PageClass : System.Web.UI.Page

F>Контрол вставляю так:

F><%@ Register Src="App_Controls/MyControl.ascx" TagName="MyControl" TagPrefix="myTag" %>
F><myTag:MyControl ID="MyControl" runat="server" />

F>VS 2005 мой PageClass внутри контрола даже не видит.


F>Что я не так делаю?

F>Подскажите, плиз!

F>
данное сообщение получено с www.gotdotnet.ru

F>ссылка на оригинальное сообщение


А ты где обращаешься к переменной? C помощью ASP-вставки или непосредственно из кода?
Насколько я понял — ASP вставка. Проверь есть ли в using секции юзер-контрола ссылка на namespace страницы и если есть
то должно быть так:
namespace Project.MyControls{

using Project.Pages;
....





}

а не так:


using Project.Pages;

namespace Project.MyControls{
...
}
Re[3]: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 20.06.05 19:00
Оценка:
Здравствуйте, AlexGK, Вы писали:

AGK>Здравствуйте, flashion, Вы писали:


F>>Да, я так делал, но не получается


F>>Ругается:

F>>CS0246: The type or namespace name 'PageClass' could not be found (are you missing a using directive or an assembly reference?)

F>>Объявляю класс страницы так:

F>>public partial class PageClass : System.Web.UI.Page

F>>Контрол вставляю так:

F>><%@ Register Src="App_Controls/MyControl.ascx" TagName="MyControl" TagPrefix="myTag" %>
F>><myTag:MyControl ID="MyControl" runat="server" />

F>>VS 2005 мой PageClass внутри контрола даже не видит.


F>>Что я не так делаю?

F>>Подскажите, плиз!

F>>
данное сообщение получено с www.gotdotnet.ru

F>>ссылка на оригинальное сообщение


Признаю: не прав. Это я говорил про VS 2003. Попрбовал в Visual Web develoer , многое они там поменяли...... не понимаю почему, но действиетльно нельзя обратиться к типу страницы.... ЕДинственное до чего додумался:
Создаешь файл класса, в нем определяешь интерфейс:

public interface IValue
{
     string Value
    {
        get;
    }
}


на странице в которой ты помещаешь данные
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class MyPage : System.Web.UI.Page,IValue
    {
        private string _val = "";
        string IValue.Value
        {
            get { return _val; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {

            _val = "Vasya Pupkin";
        }
    }



В юзер контроле:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using ASP;
    public partial class wc : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
           this.Label1.Text = ((IValue)this.Page).Value;
        }
    }


===========
Согласен, что это кривовато. Решение получено с целью доказать Visual Web Developer, что я ее обману
Позже дам нормальное решение.
Re[3]: Доступ к переменным их контрола
От: Аноним  
Дата: 21.06.05 06:43
Оценка:
Всем огромное спасибо за ответы!!!!!!!!!!!!!!!!

Тут пару раз Вы предлагали решение, связанное с namespace.
В общем, почему-то, .NET ругается, когда класс страницы или контрола пытаешься включить в какой-либо namespace.

namespace myNamespace
{
public partial class myClass : System.Web.UI.UserControl
{
...

CS0115: 'ASP.myControlascx.FrameworkInitialize()': no suitable method found to override


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 21.06.05 09:47
Оценка:
Здравствуйте, flashion, Вы писали:

F>Всем огромное спасибо за ответы!!!!!!!!!!!!!!!!


F>Тут пару раз Вы предлагали решение, связанное с namespace.

F>В общем, почему-то, .NET ругается, когда класс страницы или контрола пытаешься включить в какой-либо namespace.

F>namespace myNamespace

F>{
F> public partial class myClass : System.Web.UI.UserControl
F> {
F> ...

F>CS0115: 'ASP.myControlascx.FrameworkInitialize()': no suitable method found to override


Да, это я понял, когда попробовал все проделать на VWD 2005. Вечером попробую с ним разобраться. Пока что есть лишь идеи с интерфейсами см. выше
F>
данное сообщение получено с www.gotdotnet.ru

F>ссылка на оригинальное сообщение
Re[5]: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 21.06.05 17:42
Оценка:
Здравствуйте, AlexGK, Вы писали:

AGK>Здравствуйте, flashion, Вы писали:


F>>Всем огромное спасибо за ответы!!!!!!!!!!!!!!!!


F>>Тут пару раз Вы предлагали решение, связанное с namespace.

F>>В общем, почему-то, .NET ругается, когда класс страницы или контрола пытаешься включить в какой-либо namespace.

F>>namespace myNamespace

F>>{
F>> public partial class myClass : System.Web.UI.UserControl
F>> {
F>> ...

F>>CS0115: 'ASP.myControlascx.FrameworkInitialize()': no suitable method found to override


AGK> Да, это я понял, когда попробовал все проделать на VWD 2005. Вечером попробую с ним разобраться. Пока что есть лишь идеи с интерфейсами см. выше

F>>
данное сообщение получено с www.gotdotnet.ru

F>>ссылка на оригинальное сообщение


Посмотрел в дизассемблере... нет слов, одни чувства, юзер контрол находится в одной сборке, страница — в другой (может, это потому что я работаю без IIS?). Советую посмотреть и тебе.
Re[5]: Доступ к переменным их контрола
От: Аноним  
Дата: 22.06.05 05:52
Оценка: -1
Попробуйте ещё так:

В контроле сделайте паблик свойство Owner.

В коде страницы при загрузке этого контрола пишите в это свойство ссылку на страницу
MyControl ctl = (MyControl) ....
ctl.Owner = this;

Потом в контроле обращайтес к паблик свойствам страницы.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[6]: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 22.06.05 12:26
Оценка:
Здравствуйте, Corwin_XX, Вы писали:

C_X>Попробуйте ещё так:


C_X>В контроле сделайте паблик свойство Owner.


C_X>В коде страницы при загрузке этого контрола пишите в это свойство ссылку на страницу

C_X>MyControl ctl = (MyControl) ....
C_X>ctl.Owner = this;

C_X>Потом в контроле обращайтес к паблик свойствам страницы.


C_X>
данное сообщение получено с www.gotdotnet.ru

C_X>ссылка на оригинальное сообщение



Чтобы к чему-то обратиться, нужно знать тип этого чего-то. Ссылку на объект-страницы я и так имею

MyControl.Page
Re[6]: Доступ к переменным их контрола
От: Аноним  
Дата: 28.06.05 12:52
Оценка:
MyControl.Page — не совсем то. Например, ты можешь грузить свой конотрол из другого контрола (ascx).

Насчёт типа — я не понял, как его можно не знать? Как ты описываешь свойство Owner?
Public SomeType Owner {...}




данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[7]: Доступ к переменным их контрола
От: AlexGK Россия  
Дата: 29.06.05 17:34
Оценка:
Здравствуйте, Corwin_XX, Вы писали:

C_X>MyControl.Page — не совсем то. Например, ты можешь грузить свой конотрол из другого контрола (ascx).


C_X>Насчёт типа — я не понял, как его можно не знать? Как ты описываешь свойство Owner?

C_X>Public SomeType Owner {...}

Угу... Я тоже так думал. Попробуй в Visual WebDeveloper 2005 0 поймешь. На всякий случай расскажу. Есть проект в нем есть страница Default.aspx, соответственно класс c тем же именем в одноименном файле. Есть юзер-контрол, его класс, предположим wc... бла-бла-бла.
Весь прикол в том, что когда в коде страницы пишешь что-то типа:

...Page_load(..){
Type t = typeof(wc);// компилируется, работает
this.label1.Text = t.ToString();
}


а если пишешь в коде контрола
...Page_load(..){
Type t = typeof(Default);// возможны варианты - _default , default 
this.label1.Text = t.ToString();
}


То он ругается на этапе компиляции, мол, не знает он такого класса Default. Это верно не только для дефолтовой страницы но и для всех страниц. Ради прикола можешь посмотреть что компилятор дает на выходе. Попробуй проделать, я тоже не мог поверить в это
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.