#c# #asp.net #user-controls
#c# #asp.net #пользовательские элементы управления
Вопрос:
Я сохраняю имя и фамилию в двух метках на главной странице. У меня также есть эти значения в классе (класс мало что делает, но я использую их для будущего расширения). У меня есть пользовательский элемент управления, который отправит электронное письмо с именем и фамилией в качестве тела.
Мой вопрос в том, как я могу перенести значения переменной label или class в переменную body пользовательского элемента управления?
Комментарии:
1. В какой среде создается этот пользовательский элемент управления?
2. Извините, я новичок в ASP.NET и C # что именно вы подразумеваете под окружением?
3. Это означает, принадлежит ли пользовательский элемент управления ajax?
4. Нет .. это обычный ascx-файл с парой текстовых полей и кнопкой
Ответ №1:
Создайте свойство в вашем пользовательском элементе управления с типом данных, которые вы хотите ему передать, и заполните его на своей странице при создании элемента управления.
public class myUserControl : Control
{
...
public int myIntProperty {get; set;}
...
}
Позже этому в исходном коде вы можете присвоить значение типа
myUserControl cntrl = new myUserControl();
cntrl.myIntProperty = 5;
Вместо этого вы можете передать значение через разметку также следующим образом
<uc1:myUserControl ID="uc1" runat="server" myIntProperty="5" />
Комментарии:
1. как мне получить значение myIntProperty при загрузке страницы?
Ответ №2:
Вам нужно создать свойства в вашем элементе управления для хранения этих значений; затем из кода страницы просто присвоите значения свойствам в элементе управления.
В вашем элементе управления вы можете иметь что-то вроде
public string FirstName
{
get {
if (ViewState["FirstName"] == null)
return string.Empty;
return ViewState["FirstName"].ToString();
}
set {
ViewState["FirstName"] = value;
}
}
Комментарии:
1. Это верно. Если вы просто реализуете get / set и не обрабатываете это прямо перед этим блоком
[Browsable(true), EditorBrowsable(EditorBrowsableState.Always), Bindable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [Description("Some description"), Category("Misc"), DefaultValue(string.Empty)]
, вы никогда не получите правильную работу.
Ответ №3:
Вам нужно определить общедоступные свойства элемента управления, а затем, когда вы используете элемент управления на странице, вы можете передавать значения этим параметрам.
Что-то вроде:
<cc:mycustomControl runat="server"
MyProperty1=<%# label1 %>
MyProperty2=<%# label2 %>
/>
Комментарии:
1. таким образом, если нормально, когда нужно передать только пару элементов управления, но с большим количеством кода будет беспорядочно, могу ли я передать значение каким-либо другим способом?
2. Не уверен, что я понял. Почему это беспорядочно. Что вы имеете в виду под передачей другим способом? Имеет ли значение точный синтаксис того, как вы это передаете?
3. Нет, я имею в виду, что написание строки для каждого свойства сделает код длиннее, я все еще зеленый, поэтому я пытаюсь следовать книге .. более длинный код, больше шансов на ошибки
4. Но теперь, когда я думаю об этом, передача значения по присваиванию все равно приведет к появлению строки кода в любом случае, я тоже попробую это
5. хорошо, тогда поместите их в одну строку … все еще не понимаю, как вы ожидаете передать что-то элементу управления (или функции), не передавая его…
Ответ №4:
Шаг 1: Вы можете опубликовать значения как свойство, а затем легко использовать это.
Шаг 2: Для доступа к вашей странице из пользовательского элемента управления вы можете использовать Parent
свойство или какой-либо пользовательский логин для доступа к родительской странице, а затем написать код для использования значения свойства.
Комментарии:
1. совпали ли наши ответы на полпути 🙂
Ответ №5:
вы можете сделать что-то подобное в своем пользовательском элементе управления
string x=((yourparentcontrol)this.parent).label1.text;
и использовать строку x
.
Комментарии:
1. пробовал это .. выдает ошибку Ключевое слово ‘this’ недоступно в текущем контексте