2014-01-06 7 views
0

у меня есть пользовательский элемент управления:Не удается получить доступ к свойствам моих пользовательских элементов управления,

<%@ Control Language="C#" ClassName="WebUserControl" %> 
<script runat="server"> 
public string name { get; set; } 
</script> 

Тогда на странице У меня есть

<%@ Register Src="~/Controls/my_control.ascx" TagName="MyControl" TagPrefix="Me"%> 
<Me:MyControl runat="server" ID="myControl1" /> 

и я могу видеть свойство, если я

<Me:MyControl runat="server" ID="myControl1" name="Hello World"/> 

Однако, если из моего кода или кодовых меток я пытаюсь

myControl1.name 

Я ничего не получаю. Что я делаю не так?

+0

Хорошо, так что я сделал, это отрезал мой контроль и переписал все это. Затем я добавил его на свою страницу с помощью перетаскивания. Теперь это работает. Понятия не имею почему. –

+0

Это не хороший результат, поскольку вы ничего не узнали. Можете ли вы разместить разметку и код для вашего нового пользователя и вашей страницы? – sh1rts

ответ

0

На вашей странице отсутствует директива using. Добавьте заявление using {your.control.namespace}.

+0

Где мне это нужно? Код страницы позади? –

+0

Да, в коде для страницы. – sh1rts

+0

intellisense не показывает мне пространства имен, в котором будет находиться мой элемент управления. Чтобы быть ясным, я могу получить контроль только от моего кода, он просто не даст мне никаких своих публичных свойств, которые я создал. –

0

Он отлично работает. Вы перетащили элемент управления на форму ?

+0

Нет, это не в моей панели инструментов. Я просто поставил директиву регистров в верхней части моей страницы, а затем intellisense всплыл, когда я начал печатать . Чтобы быть ясным, все работает, я не могу получить его свойства из моего кода. –

+0

Это не должно быть в панели инструментов. Вы можете перетащить его из проводника Solution/Project. –

+0

Я просто сделал перетаскивание, и я попытался получить доступ к «имени» из моего кода, выполнив то же самое, что и раньше, но не повезло. Не имеет смысла, что на моей странице aspx intellisense видит «имя», когда я печатаю его, но если я попытаюсь получить доступ к этому свойству из codebehind, его не будет хорошо. –

1

Пожалуйста, попробуйте следующее:

Это связано контролировать состояние:

public string name 
    { 
     get 
      { 
      object obj = ViewState["name"]; 
       return (obj == null) ? "" : obj.ToString(); 
      } 
     set 
     { 
      ViewState["name"] = value; 
     } 
    } 

Вы можете найти информацию здесь ДОПОЛНИТЕЛЬНО:

+0

Я не совсем понимаю, что я должен делать с этим переопределением. Также расширенная версия имени, которую вы мне дали, пока не работает. –

+0

Он работает без этого. –

+0

@SteveWellens Я согласен, что он может работать без него, но для того, чтобы сохранить состояние объекта, необходимо соблюдать некоторые хорошие практики. – Dalorzo

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