2012-07-03 2 views
0

Вчера я начал писать C# для разработки пользовательского контроля для Umbraco, и я столкнулся с хорошо известной проблемой, где я получаю ошибку «Имя * не существует в текущем контексте ". Я нашел inumerous ответов на эту конкретную проблему, как:VWD2010 * .aspx.design.cs файл не автогенерируется правильно

Fixing "name does not exist in the current context" errors in Web Developer Express

Label doesnt exist in the current context

http://forums.asp.net/t/1006588.aspx/1?The+name+xxx+Does+Not+Exist+in+the+Current+Context

... и так далее и так далее.

Ни один из этих вопросов, однако, не помог мне решить мою проблему, и я все еще ударяю головой о стену.

Я обнаружил, что мои теги и их элементы управления обнаруживаются моим файлом * .apsx.cs, , если я не помещаю их в любой не-asp: -tag!

Я пытаюсь создать пользовательский элемент управления с помощью настраиваемого шаблона, для чего мне нужен -tag. Кроме того, я помещал это внутри элемента управления LoginView.

<asp:LoginView ID="MemberValidation" runat="server"> 
    <AnonymousTemplate> 
    <asp:Login ID="MemberLogin" runat="server" OnLoggedIn="MemberLogin_OnLoggedIn"> 
     <LayoutTemplate> 
      <asp:Literal ID="InformationMessage" runat="server"></asp:Literal> 
     </LayoutTemplate> 
    </AnonymousTemplate> 
    <LoggedInTemplate>...</LoggedInTemplate> 
</asp:LoginView> 

Мои LiteralControl (и все остальные LiteralControls у меня есть - это только маленький пример) не registrered в пределах * .aspx.design.cs файл автоматически, следовательно, он не доступен в моей *. aspx.cs, однако, если я удалю тег и тег, появится мой LiteralControl.

Однако мне нужны два тега, чтобы сделать функцию кода по своему желанию, поэтому мой вопрос остается нерешенным: что я могу сделать? Это ошибка?

Спасибо заранее, Brinck10

ответ

1

Если я понять вашу проблему правильно, Буквальное управление может не быть доступны непосредственно .cs до тех пор, как она размещалась в AnonymousTemplate или LayoutTemplate тегов.

Если это так, то все, что находится внутри этих тегов, является (как вы уже догадались) шаблонами и не представляет собой фактический экземпляр времени выполнения, и компилятор не может гарантировать, что эти шаблоны будут показаны (например, пользователь вошел в систему , поэтому вместо этого отображается LoggedInTemplate) и, следовательно, не выставляет эти элементы управления автоматически в .cs.

Фактически, единственное, что мгновенно видно для .cs, будет LoginView. Таким образом, чтобы получить доступ к элементам управления в шаблонах, вам придется «найти» их во время выполнения с кодом, подобным следующем:

if (!User.Identity.IsAuthenticated) 
{ 
    Login memberLogin = (Login)this.MemberValidation.FindControl("MemberLogin"); 
    Literal informationMessage = (Literal)memberLogin.FindControl("InformationMessage"); 
    informationMessage.Text = "Hello World"; 
} 
+0

Абсолютно безошибочный. Если бы эта проблема была раньше - это нехорошо, но я использовал то же решение для вас, чтобы решить эту проблему. –

+0

Спасибо Горан. Он решил мою проблему :-)! –

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

  • Нет связанных вопросов^_^