Пустые поля управления пользователем веб-форм при загрузке - PullRequest
4 голосов
/ 09 октября 2011

Я пытаюсь перенести старый проект ASP.NET Web Site в проект Web Application в VS2010. В основном это похоже на работу, однако я обнаружил, что Пользовательские элементы управления в .ascx файлах имеют все свои собственные элементы управления, установленные как нулевые.

Я подозреваю, что это как-то связано с тем, как я использую объявления в файлах aspx, которым нужны элементы управления, но я не уверен. Я создал образец файла и страницы и могу воспроизвести его. Исходный сайт был динамически скомпилирован, однако я пытаюсь превратить его в одну DLL, поскольку ничего не изменится без нового развертывания.

Может ли кто-нибудь объяснить, почему «TheTextBox» будет нулевым на Page_Load пользовательского элемента управления, и возможное решение?

Управляющий файл ASCX WebUserControl1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl1.ascx.cs" Inherits="MyNamespace.Ascx.WebUserControl1" ClassName="MyNamespace.Ascx.WebUserControl1" %>
<asp:TextBox runat="server" ID="TheTextBox" MaxLength="128" />  

Управление ASCX CodeFile WebUserControl1.ascx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MyNamespace.Ascx
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
             // TheTextBox is null at this point. Why?
        }
    }
} 

Управляющий файл ASCX AutoGenerated Designer File WebUserControl1.ascx.designer.cs

namespace MyNamespace.Ascx {


    public partial class WebUserControl1 {

        /// <summary>
        /// TheTextBox control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.WebControls.TextBox TheTextBox;
    }
}

WebForm, содержащий элемент управления WebForm1.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" Inherits="MyNamespace.WebForm1" Codebehind="WebForm1.aspx.cs" %>

<%@ Register NameSpace="MyNamespace.Ascx" Assembly="MyAssembly"  TagPrefix="prefix" %>
<asp:Content ID="Content1" ContentPlaceHolderID="PageHead" runat="server">

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <prefix:WebUserControl1 runat="server" ID="IncludedControl" />
</asp:Content>

WebForm, содержащая управляющий кодовый файл WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MyNamespace
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

Редактировать : Как предлагается, заменить директиву WebForm на

<%@ Register Src="~/ascx/WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="prefix" %>

приводит к прекрасному Желтому Экрану Смерти:

CS0260: отсутствует частичный модификатор при объявлении типа 'PSVOnline.Ascx.WebUserControl1'; существует другое частичное объявление этого типа

Line 129:    
Line 130:    [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
Line 131:    public class WebUserControl1 : global::MyNamespace.Ascx.WebUserControl1 {
Line 132:        
Line 133:        private static bool @__initialized;

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Обычно, когда я регистрирую пользовательский элемент управления, вместо того, что у вас есть на WebForm1.aspx, я регистрирую их следующим образом:

<%@ Register Src="~/WebUserControl1.ascx" TagName="control" TagPrefix="uc" %>

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

0 голосов
/ 01 декабря 2011

Я нашел решение ..

Использование следующего подхода прекрасно работает ..

http://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx

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