Compiler Error Message: CS0122: 'Controls_Arcade_StarDisplay.Stars' is inaccessible due to its protection level
我已经检查了其他SO线程,但对它们没有多大意义。此控件正在另一个webusercontrol中使用。每当我尝试用它做任何事情时都会抛出这个错误。有问题的课程是:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="StarDisplay.ascx.cs" Inherits="Controls_Arcade_StarDisplay" %>
<asp:Panel runat="server" ID="Stars" />
代码背后:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.CompilerServices;
public partial class Controls_Arcade_StarDisplay : System.Web.UI.UserControl
{
public double Rating { get; set; }
public string Tooltip { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
string CSSClass = "star-rating s-";
if (Rating < 0.25)
CSSClass += "0";
else if (Rating < 0.75)
CSSClass += "05";
else if (Rating < 1.25)
CSSClass += "1";
else if (Rating < 1.75)
CSSClass += "15";
else if (Rating < 2.25)
CSSClass += "2";
else if (Rating < 2.75)
CSSClass += "25";
else if (Rating < 3.25)
CSSClass += "3";
else if (Rating < 3.75)
CSSClass += "35";
else if (Rating < 4.25)
CSSClass += "4";
else if (Rating < 4.75)
CSSClass += "4";
else if (Rating < 1.25)
CSSClass += "1";
else if (Rating < 4.75)
CSSClass += "45";
else
CSSClass += "5";
Stars.CssClass = CSSClass;
if (Tooltip != null)
Stars.ToolTip = Tooltip;
}
}
该控件已在web.config中注册:
<pages validateRequest="false" smartNavigation="false" clientIDMode="Static">
<controls>
<add tagPrefix="Scirra" src="~/Controls/Arcade/GameOverview.ascx" tagName="GameOverview"/>
<add tagPrefix="Scirra" src="~/Controls/Arcade/Stars/StarDisplay.ascx" tagName="StarDisplay"/>
</controls>
</pages>
开始显示控件出现在游戏概述控件中。
感谢您的帮助,完全陷入困境!其他问题涉及获取我不理解的控件的属性,或者更改设计器中我无法找到的内容。
答案 0 :(得分:2)
这意味着您的用户控件中有一些名为Stars
的内容,可能定义为private
或protected
。
问题是这是一个网站,而不是Web应用程序,在.Web站点中,.Net会自动将runat="server"
控件创建为protected
属性,因此它们不会暴露在用户控制或其直接继承者。
所以有两种可能的选择:
将网站转换为Web应用程序。这将导致创建包含控件定义的设计器文件。然后,您可以将控件从设计器文件中取出,将其置于代码隐藏中,并将访问级别更改为公共。
由于这是一个可以从其他控件访问的控件,因此比直接公开控件更好的设计是提供其他控件可以使用的交互方法,以便在此控件中封装行为。例如,公开接受评级的SetRating
方法并在内部更新Stars
面板。
从设计的角度来看,选项#2绝对是一个更好的选择。
答案 1 :(得分:0)
我的控件出现了同样的错误消息。我检查了我的代码文件,答案显而易见。该程序定义为void Register_Submit()
。我已将public
添加到其定义中,因此它变为Public void Register_Submit()
,错误消失了。