Установить выбранное значение DropDownList на главной странице с дочерней страницы - PullRequest
0 голосов
/ 06 июля 2011

Попытка что-то вроде

public string MyText { get {return lbl.Text;} set {lbl.Text = value;}}

взято из этот вопрос заканчивается исключением:

public string change_ddlArea { get { return ddlArea.SelectedItem.Text; } set { ddlArea.Items.FindByValue(value).Selected = true; } }

-> Ссылка на объект не установлена ​​наэкземпляр объекта.

Обычно их использование вызывает ту же ошибку:

this.ddlEnergyType.Items.FindByValue(resourceTypeVal).Selected = true;
((DropDownList)Master.FindControl("ddlArea")).Items.FindByValue("all").Selected = true;

У меня возникают трудности с поиском ответа на эту проблему в Google.Это должно работать, учитывая, что если манипуляция меткой делает, переход на ddl также будет?

Единственное отличие, которое может быть проблемой, это при попытке вызвать это .. (в2-ой блок кода) Я использую

Master.change_ddlArea = sendoff_area;

, и в вышеупомянутой ссылке это делается так:

((MasterPageTypeName)Page.MasterPage ).MyText = "test";
//so mine would look like this:
((GAWMaster)_default.Master).change_ddlArea = "all";

, однако в intellisense отсутствует '.Master' - ввод его вызывает информациючтобы появиться: ссылка на объект требуется для нестатического поля, метода или свойства ....

tl, dr: halp

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Мастер-страница в .NET - это просто класс, верно?Давайте посмотрим на это так.Ваша страница использует эту главную страницу.Но это означает, что ваша страница имеет эту главную страницу, а не является этой главной страницей.Следовательно, теоретически вы должны иметь возможность получить ссылку на эту главную страницу со своей страницы.Давайте используем другие слова, чтобы сделать это более ясным:

 // This is like the master page
 public class Hand
 {
 }

 // This is like the page. Please notice that a human **has** hands, but a human **is** not hand.
 public class Human
 {
     Hand leftHand = new Handl();
 }

Теперь подумайте.Можно ли добраться до пальцев через экземпляр человеческого класса?Вы видите здесь логику?Конечно, вы можете получить ссылку на класс Hand, и оттуда вы можете получить ссылку на пальцы:

 Human jack = new Human();
 jack.Hand.Fingers["SmallFinger"].Cut();

Что теперь, если ваша рука - это особый тип руки (Специальная главная страница сярлык в нем?).Все, что вам нужно, это приведение

 ((ExpensiveHand)jack.Hand).Rings.Steal();

Это логика между страницей и главной страницей.

1 голос
/ 06 июля 2011

Ваш вопрос ОЧЕНЬ сбивает с толку, если не сказать больше. Очень просто сделать то, что просит ваш заголовок:

Первый в вашем MasterPage коде: do:

public string change_ddlArea
{
    get { return ddlArea.SelectedItem.Value; }
    set { ddlArea.Items.FindByValue(value).Selected = true; }
}

Затем на своей дочерней странице определите тип MasterPage, чтобы он мог "видеть" свойство change_ddlArea MasterPage. Смотрите здесь для получения дополнительной справочной информации.

<%@ MasterType virtualPath="~/MasterPage.master"%>

Тогда в своем коде на своей дочерней странице вы сможете просто:

Master.change_ddlArea(someValue); 

Значение, которое вы устанавливаете ДОЛЖНО , существует, или вы получите ошибку ссылки на объект. Убедитесь, что ваш DropDownList загружен правильно, и вы не делаете вещи не в порядке. Кроме того, если вы не используете ViewState и не делаете PostBack, убедитесь, что вы восстановили DropDownList перед установкой значения.

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