我的代码隐藏看起来像这样
class Image
{
public string tnImg { get; set; }
public string Name { get; set; }
public string city { get; set; }
public string refPlace { get; set; }
public string refInfo { get; set; }
public string refInfoDynamic { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
getImgCarousel();
}
public void getImgCarousel()
{
List<Image> Images = new List<Image>();
var carouselImages = new Image();
carouselImages.Name = "test";
var carouselImages2 = new Image();
carouselImages2.Name = "test2";
Images.Add(carouselImages);
Images.Add(carouselImages2);
}
然后我想在.aspx
中执行以下操作<div class="wrapCarousel">
<div>My Images</div>
<% foreach(var image in Images) { %>
<div><%=image.Name%></div> <!-- format your markup here -->
<% } %>
</div>
但似乎我无法访问.aspx页面中的图像列表...有什么建议吗?
谢谢M
答案 0 :(得分:2)
你应该在你的类中使Images
一个字段(局部变量只能在它们声明的范围内看到):
List<Image> images = new List<Image>();
protected List<Image> Images
{
get { return this.images; }
}
public void getImgCarousel()
{
var carouselImages = new Image();
carouselImages.Name = "test";
var carouselImages2 = new Image();
carouselImages2.Name = "test2";
Images.Add(carouselImages);
Images.Add(carouselImages2);
}
答案 1 :(得分:2)
您的Images
变量是getImgCarousel
方法的本地变量,无法在其外部看到。
将其提升为公共财产(或字段),以便在方法之外访问它:
// readonly property - will throw null reference if not initialized
public IList<Image> Images { get;}
public void getImgCarousel()
{
this.Images = new List<Image>();
var carouselImages = new Image();
carouselImages.Name = "test";
var carouselImages2 = new Image();
carouselImages2.Name = "test2";
Images.Add(carouselImages);
Images.Add(carouselImages2);
}
答案 2 :(得分:0)
查看Images
字段的可访问性。它是您方法中的私有临时变量。将它作为您班级的公共领域,您将能够访问它。
答案 3 :(得分:0)
在运行时,通过创建一个继承自代码隐藏类的新类来呈现aspx页面,因此,由于可访问性规则,任何私有类/字段/方法都是不可访问的。
您必须将aspx代码应该使用的任何内容声明为protected,因为这样可以访问任何继承的类。
在你的代码中,Images是方法的本地,因此即使是同一个类中的其他方法(即Page_Load)也无法访问它,更不用说生成的子类了。正如大多数其他答案所指出的那样,您需要将其从方法中删除,然后将其移至属性。
但这意味着您将Image对象公开给您的子类,这些子类是在您的基类中定义的,没有任何修饰符(class Image
),编译器将其视为private class Image
,这意味着没有其他类可以任何方式,形状或形式访问Image类。
那么为了解决这个问题,你需要将嵌套类声明为protected,因此你的子类aspx可以访问它。
我强调了所做的更正:
//accessible to the code-front
protected List<Image> Images {get; private set; }
//nested class also accessible to the code-front
protected class Image
{
public string tnImg { get; set; }
public string Name { get; set; }
public string city { get; set; }
public string refPlace { get; set; }
public string refInfo { get; set; }
public string refInfoDynamic { get; set; }
}
//exactly the reason why by default Page_Load is protected
protected void Page_Load(object sender, EventArgs e)
{
getImgCarousel();
}
//this should be private as will not be called by anything outside the class
private void getImgCarousel()
{
//uses the property
Images = new List<Image>();
var carouselImages = new Image();
carouselImages.Name = "test";
var carouselImages2 = new Image();
carouselImages2.Name = "test2";
Images.Add(carouselImages);
Images.Add(carouselImages2);
}
答案 4 :(得分:0)
你很接近,Andrew Bezzub的答案很有帮助,但你还需要使Image类可以访问。
// Make the list protected
protected List<Image> Images;
// Make the class protected
protected class Image
{
...
}
protected void Page_Load( object sender, EventArgs e )
{
...
}
public void getImgCarousel()
{
// Assign to the protected field.
Images = new List<Image>();
...
}