Передача Single Int от одного пользовательского элемента управления другому с помощью C # - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть два пользовательских элемента управления на странице ASPX. Все, что я хочу сделать, это передать один единственный int от одного элемента управления другому во время загрузки страницы.

Я попробовал несколько примеров здесь, но ни один из них не работает - извините, я имею в виду, я не могу заставить их работать! Вот что у меня есть:

default.aspx

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ucBottom.varBottomID = ucTop.varBottomID;     
    }
}

UCTOP

public partial class ucTop : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int varBottomID = 100;
    }
}

UCBOTTOM

public partial class ucBottom : System.Web.UI.UserControl
{
    public int varBottomID { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        BottomText.Text = Convert.ToUInt32(varBottomID).ToString();
    }
}

Нет ошибок, за исключением того, что BottomText.Text возвращает 0 вместо 100. Также int varBottomID = 100; заявляет, что он назначен, но никогда не используется (ucTop).

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

Как всегда, будет полезна любая помощь (но в формате руководства для чайников, приведенного ниже!).

РЕДАКТИРОВАТЬ - Извините Опечатка подкралась в код по умолчанию ...

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

На вашей главной странице это ничего не меняет - это установка ucBottom.varBottomID на себя. (Изменить: кажется, было исправлено)

В ucTop, int varBottomID = 100; ничего не делает - он устанавливает переменную внутри функции, которая не будет видна снаружи.

Результатом этих двух проблем является то, что вы никогда не получите ничего от ucTop до ucBottom.

(Кстати, условное обозначение состоит в том, чтобы начинать имена классов с заглавной буквы, а имена экземпляров - с заглавной буквы. При взгляде на код не совсем очевидно, пытаетесь ли вы получить доступ к статическим элементам или членам экземпляров ваших классов. здесь я предполагаю, что у вас есть элемент управления ucBottom, который является экземпляром класса ucBottom, и то же самое для ucTop. Это единственный случай, когда я вижу, где ваш код, как вставлено, будет компилироваться без ошибок .)

Вам может понадобиться что-то похожее на:

public partial class _Default : Page
{
    protected void Page_Load(sender obj, EventArgs e)
    {
        ucBottom.varBottomID = ucTop.varBottomID; // fix the first issue
    }
}

public partial class ucTop : UserControl
{
     public int varBottomID { get; set; } // fix the second issue
     protected void Page_Load(object src, EventArgs e)
     {
         varBottomID = 100;
     }
}

Вам также нужно будет выбрать различные события для запуска, если вы идете по этому маршруту. Если все запускается при загрузке, у вас есть проблема - сначала запускается Load на странице, , затем на дочерних элементах управления. Таким образом, свойство не будет установлено правильно. (Настройка выполняется в 3 этапа: ucTop, выбирая правильное значение для установки, _Default устанавливая его сверху вниз и ucBottom, используя его. Вам нужно, чтобы эта последовательность пошла решить , set , для правильной работы используйте , но если все сработает при загрузке, вы получите set , решить , использовать или установить , использовать , решить .) Вы можете разрешить _Default делать свое дело в LoadComplete и ucBottom на PreRender.

0 голосов
/ 13 сентября 2011

Измените свой код по мере необходимости.

public partial class ucTop : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ucBottom.varBottomID = 100;
    }
}


public partial class ucBottom : System.Web.UI.UserControl
{
    public int varBottomID { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        BottomText.Text = Convert.ToUInt32(varBottomID).ToString();
    }
}
0 голосов
/ 13 сентября 2011

Определение класса, к которому оба UserControl s могут обращаться к переменной static, будет работать:

public static class RequiredVars { public static int BottomID { get; set;} }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...