我刚刚将VB.NET项目转换为C#。但是现在即使这个继承的命名空间是正确的,我所有的.aspx页面仍然说“ [控件名称]必须可以转换为System.Web.UI.Page”

因此,在此示例中,当我将鼠标悬停在“激活”上时,我得到“激活必须可以转换为System.Web.UI.Page”

<%@ Page Language="C#" Inherits="Forum.UI.Activate"  Codebehind="Activate.aspx.cs" %>


<asp:Content ID="ctlContent" ContentPlaceHolderID="ctlContentPlaceHolder" runat="Server">
</asp:Content>


这是激活控件:

namespace Forum.UI
{
    /// <summary>
    /// Code behind for Skins/SkinName/Activate.ascx.
    /// </summary>
    /// <remarks></remarks>
    public class Activate : SkinControl
    {
        #region Private Variables

        private string Key;
        private Int32 UserID;

        #endregion

        #region Constructor

        public Activate()
        {
            base.SkinFileName = "Activate.ascx";
        }

        #endregion

        #region Initialize

        protected override void Initialize(Control ctlSkin)
        {
            // track whos on information
            base.TrackSession(EnumTask.ActivatingAccount);

            // get querystring values
            Key = base.CurrentContext.CurrentRequest.Key;
            UserID = base.CurrentContext.CurrentRequest.UserID;

            if (System.Web.HttpContext.Current.Request.IsAuthenticated)
            {
                if (UserID != base.CurrentContext.CurrentUser.UserID)
                {
                    // logout currently logged in user
                    Authentication.Logout();
                    // redirect to this page to refresh controls
                    Common.Globals.Paths.Redirect(Paths.Activate(UserID, Key), false, false);
                }
            }


            bool ActivationSuccess = User.ActivateAccount(UserID, Key,
                                                          base.CurrentContext.CurrentSettings.SharedSettings.
                                                              DefaultUserRoleID);


            if (ActivationSuccess)
            {

                Business.User.UpdatePermissionSet(UserID, 0);


                UserRoles.DeleteUserRole(UserID,
                                         base.CurrentContext.CurrentSettings.SharedSettings.
                                             DefaultAwaitingApprovalRoleID);

                UserRoles.AddUserRole(UserID, base.CurrentContext.CurrentSettings.SharedSettings.DefaultUserRoleID);


                Sessions.Add(EnumSessionObjects.ConfirmationHeader.ToString(), "Confirmation_HeaderActivationComplete");
                Sessions.Add(EnumSessionObjects.ConfirmationMesssage.ToString(), "Confirmation_TextActivationComplete");
            }
            else
            {

                Sessions.Add(EnumSessionObjects.ConfirmationHeader.ToString(), "Confirmation_HeaderActivationError");
                Sessions.Add(EnumSessionObjects.ConfirmationMesssage.ToString(), "Confirmation_TextActivationError");
            }

            Business.User.ClearCache(base.CurrentContext.CurrentUser);


            Common.Globals.Paths.Redirect(Paths.ConfirmationMessage(Sessions.SessionID()), false, false);
        }

        #endregion
    }
}


SkinControl.cs继承了BaseSkinControl.cs,然后BaseSkinControl.cs继承了自定义UserControl.cs类,最后UserControl.cs继承了System.Web.UI.UserControl。

相同的代码在VB.NET中也能正常工作,所以我不确定为什么会抱怨。我花了无数小时来尝试进行故障排除,所以我把它扔在这里,以期对一些无法解决的希望寄予希望。

我不知道这是否足够的信息,但是请告知我。

最佳答案

该错误消息是正确的,因为您发布的代码适用于UserControl,而不适用于Page。他们不是同一回事。您甚至可以在此Activate类的注释中看到它原本应该是ASCX文件而不是ASPX页面的代码背后:


///后面的代码是Skins / SkinName / Activate.ascx。


从您发布的继承层次结构中也很明显,这是针对UserControl的。

检查您的VB代码,并确保它实际上是一个ASPX页面。

关于asp.net - “控件名称”必须可以转换为System.Web.UI.Page,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7055464/

10-16 05:57