Наследование asp.net UserControl, веб-элементы управления в базовом пользовательском элементе управления имеют нулевой указатель - PullRequest
2 голосов
/ 01 марта 2010

У меня есть базовый пользовательский элемент управления (WC1), который наследуется от WebUserControl, и дочерний пользовательский элемент управления (WC2), который наследуется от WC1. Я добавил textBox и метку в WC1 в представлении дизайна, а не в коде позади. Но все серверные элементы управления, которые я поместил в WC1, являются нулевыми и дают исключение нулевого указателя. Я пытался получить доступ к textBox и метке в различных событиях, но все они нулевые.

Кто-нибудь знает, что здесь пошло не так? Спасибо.

Действия по воспроизведению ошибки:

  1. создать пользовательский веб-элемент управления под названием WC1, добавив новый элемент в VS
  2. добавил элемент управления textBox и сервера меток в WC1 в режиме конструктора VS и поместил код позади: var value = txetBox.Text;
  3. создал еще один пользовательский веб-элемент управления под названием WC2, добавив новый элемент в VS и изменив его базовый класс на WC1 в своем коде за
  4. создать веб-страницу, добавив новый элемент в vs, и перетащить WC2 в представление дизайна страницы.
  5. запустите страницу, после чего вы увидите исключение для кода в WC1

код:

WC1:

code behind:
    public partial class WC1: System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

страница:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WC1.ascx.cs" Inherits="WebApplication1.WC1" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

WC2: код позади:

public partial class WC2: WC1
    { var txt = TextBox1.Text}

страница:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WC2.ascx.cs" Inherits="WebApplication1.WC2" %>

Подводя итог моему вопросу:

в этом случае могут быть созданы элементы управления веб-сервером WC1? или пользовательский элемент управления, наследуемый от другого пользовательского элемента управления и элементов веб-сервера родительского пользовательского элемента управления, может быть передан его дочерним элементам, не беспокоясь о макете?

Хорошо, я проверил, если я не добавлю элемент управления в коде WC1, он никогда не будет создан.

1 Ответ

1 голос
/ 01 марта 2010

Если вы не установили базовый тип на WC1, то при добавлении элемента управления в разметку элементы управления были созданы в designer.cs файла WC2 , и они скрывают наследуемые из WC1.

Чтобы решить эту проблему, просто откройте файл designer.cs для WC2 и удалите элементы управления, а затем элементы базового класса будут такими же, как в разметке при компиляции. Альтернативное решение: убедитесь, что вашим базовым классом является WC1, удалите конструктор, щелкните правой кнопкой мыши на .ascx и выберите Преобразовать в веб-приложение , это будет заново сгенерировать конструктор, а не создавать те элементы управления, которые он найдет в базовый класс ... тот же эффект.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...