Передача значений со страницы в пользовательский элемент управления

#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’ недоступно в текущем контексте