2015-07-28 1 views
0

У меня есть главная страница aspx и два пользовательских элемента управления. В пользовательском элементе управления 1 у меня было поле «Скрытое» (i.e Hiddenfield1), и я ищу использовать это скрытое значение поля в элементе управления Control2. До сих пор это то, что я сделал,Доступ к скрытому полю или переменной с страницы aspx для его дочернего пользовательского элемента управления

1) зарегистрировать usercontrol 1 в usercontrol 2 и создать другое скрытое поле в пользовательском элементе управления 2 и с помощью set и get, я попытался присвоить значение usercontrol1 скрытому полю в usercontrol 2, но не работал

фрагменты кода:

в пользовательском элементе управления 2:

Me.VarUC2 = Me.Usercontrol1ID.VarUC1 

но в этом, она возвращается нуль и VarUC1 присваивается другой локальной целочисленной переменной в главной странице. Возможно ли получить значение VarUC2 из переменной на главной странице. Пожалуйста, дайте мне знать, как решить эту проблему.

+0

CType (Me.Parent.FindControl («IdOfUC1»), TypeOfUC1) .VarUC1 - Примечание: Возможно, вам потребуется перейти на несколько уровней, чтобы найти свой контроль, и это делает ваш код более хрупкими разметке исключением случаев, когда вы делаете какую-то рекурсивную функцию. – N0Alias

+0

Это не работает. Можете ли вы сообщить мне, как получить целочисленное значение переменной с страницы aspx на пользовательский элемент управления? Я назначил VarUC1 переменной на главной странице (т. Е. @VarMaster), могу ли я получить VarMaster в usercontrol 2 ?? @NoAlias ​​ – Knowledge2Share

+0

Добавьте HiddenField и присвойте ему значение. Затем вы выполняете ту же сделку CType, но с HiddenField. Пройдите и используйте точку останова и окно «Часы», чтобы вы могли определить, сколько .Parent.Parent.Parent.etc вам нужно сделать, чтобы попасть на главную страницу. – N0Alias

ответ

1

Чтобы получить значение скрытого поля на главной странице, вы должны сначала получить экземпляр главной страницы из своего пользовательского элемента управления. Как правило, главная страница - это первый элемент управления по свойствам страницы, доступный из любого элемента управления в ASP.Net. После того, как у вас есть экземпляр главной страницы, вы можете использовать метод FindControl и передать результат в виде скрытого поля. Хотя это можно сделать в одной строке, я разбил пример на несколько строк, чтобы было легче следовать. Просто замените «IdOfYourHiddenField» на фактический идентификатор.

Dim objTargetPage As Page = CType(sender, Control).Page 

    Dim objMasterPage As Control = CType(objTargetPage.Controls(0), Control) 

    Dim hdnTarget As HiddenField = CType(objMasterPage.FindControl("IdOfYourHiddenField"), HiddenField) 

    Dim intValue As Integer = CInt(hdnTarget.Value) 
+0

Я попытался, как это :: ** UIHiddenFieldUC2 = CType (Me.Page.Master.FindControl ("[UIHiddenFieldMasterPage]"), скрытое) ** ** Me.IntUC2 = CInt (UIHiddenFieldUC2.Value) ** .............. Но он бросает «System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта». ошибка. Кажется, что значение скрытого поля главной страницы стирается, когда выполнение времени достигает этой точки. \t \t Не могли бы вы предложить мне другие способы? – Knowledge2Share

+0

Возможно, вы получаете это, потому что UIHiddenFieldUC2 имеет значение NULL. Если значение скрытого поля равно null, оно будет возвращаться как пустая строка, и вы получите недопустимое исключение литья с CInt(). То, что вам нужно сделать, это установить точку останова в строке FindControl() и использовать ваше окно просмотра, чтобы точно определить, где это скрытое поле находится в стеке управления, чтобы вы получили ссылку на него. – N0Alias

+0

Я добавил этот, чтобы посмотреть окно :: CType (Me.Page.Master.FindControl («[UIHiddenFieldExamInteger]»), HiddenField) .. Он показывает это в столбце value «Связанный объект имеет значение« Nothing ».» – Knowledge2Share

Смежные вопросы