C# Webusercontrol由于其保护级别而不可访问
我已经检查了其他SO线程,但没有太多的意义。此控件正在另一个webusercontrol中使用。每当我尝试用它做任何事情时,它就会抛出这个错误。所讨论的课程是:C# Webusercontrol由于其保护级别而不可访问,c#,asp.net,webusercontrol,C#,Asp.net,Webusercontrol,我已经检查了其他SO线程,但没有太多的意义。此控件正在另一个webusercontrol中使用。每当我尝试用它做任何事情时,它就会抛出这个错误。所讨论的课程是: Compiler Error Message: CS0122: 'Controls_Arcade_StarDisplay.Stars' is inaccessible due to its protection level 代码隐藏: <%@ Control Language="C#" AutoEventWireup="tr
Compiler Error Message: CS0122: 'Controls_Arcade_StarDisplay.Stars' is inaccessible due to its protection level
代码隐藏:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="StarDisplay.ascx.cs" Inherits="Controls_Arcade_StarDisplay" %>
<asp:Panel runat="server" ID="Stars" />
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用System.Runtime.CompilerServices;
公共部分类控件\u Arcade\u StarDisplay:System.Web.UI.UserControl
{
公共双重评级{get;set;}
公共字符串工具提示{get;set;}
受保护的无效页面加载(对象发送方、事件参数e)
{
字符串CSSClass=“星级s-”;
如果(额定值<0.25)
CSSClass+=“0”;
否则,如果(额定值<0.75)
CSSClass+=“05”;
否则,如果(额定值<1.25)
CSSClass+=“1”;
否则,如果(额定值<1.75)
CSSClass+=“15”;
否则,如果(额定值<2.25)
CSSClass+=“2”;
否则,如果(额定值<2.75)
CSSClass+=“25”;
否则,如果(额定值<3.25)
CSSClass+=“3”;
否则,如果(额定值<3.75)
CSSClass+=“35”;
否则,如果(额定值<4.25)
CSSClass+=“4”;
否则,如果(额定值<4.75)
CSSClass+=“4”;
否则,如果(额定值<1.25)
CSSClass+=“1”;
否则,如果(额定值<4.75)
CSSClass+=“45”;
其他的
CSSClass+=“5”;
Stars.CssClass=CssClass;
如果(工具提示!=null)
Stars.ToolTip=工具提示;
}
}
控件已在web.config中注册:
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;
}
}
开始显示控件出现在游戏概览控件内
谢谢你的帮助,完全卡住了!其他问题涉及获取我不了解的控件的属性,或者在设计器中更改我也找不到的内容。这意味着您的用户控件中有一个名为
Stars
的东西,它可能被定义为private
或protected
问题在于,这是一个网站而不是Web应用程序,在网站中,.Net会自动将runat=“server”
控件创建为受保护的
属性,因此它们不能在用户控件或其直接继承者之外公开
因此,有两种可能的选择:
SetRating
方法,该方法接受评级并在内部更新Stars
面板从设计的角度来看,选项2绝对是一个更好的选项。这意味着您的用户控件中有一个名为
Stars
的东西,它可能被定义为private
或protected
问题在于,这是一个网站而不是Web应用程序,在网站中,.Net会自动将runat=“server”
控件创建为受保护的
属性,因此它们不能在用户控件或其直接继承者之外公开
因此,有两种可能的选择:
SetRating
方法,该方法接受评级并在内部更新Stars
面板从设计角度来看,选项2绝对是一个更好的选项。我的控件出现了相同的错误消息。我检查了我的代码文件,答案变得显而易见。该过程被定义为
void Register\u Submit()
。我在其定义中添加了public
,因此它变成了public void Register\u Submit()
,错误消失了。我的控件也收到了相同的错误消息。我检查了我的代码文件,答案变得显而易见。该过程被定义为void Register\u Submit()
。我在它的定义中添加了public
,因此它变成了public void Register\u Submit()
,错误就消失了。我发布了整个类,将protected void Page\u Load
更改为public void Page\u Load
会引发相同的错误设计器文件中的星号声明是什么样子的?抱歉,我以前从未真正使用过设计器,设计器文件位于何处?我认为它是默认为protected生成的。为了避免这种情况,我通常会在常规代码隐藏(而不是设计器)中公开公共属性或方法,并以这种方式共享控件。这可能是一个选项,也可能不是一个选项,取决于您的情况。有两种方法可以达到此目的:1)右键单击页面并选择查看代码Gen文件;2) 显示项目中的所有文件,然后展开页面;你将看到它和你的代码隐藏。我发布了整个类,将受保护的无效页面加载
更改为公共无效页面加载
抛出了相同的错误星星声明是什么样子的
<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>