我刚刚将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/