我正在使用闪烁API进行一些测试,我在我的代码中更改了一些控件后出现了一个奇怪的问题。
当我第一次尝试获取图像时,我将它们存储在一个图像中,并且每件事情都很好但我想对图像做其他的事情,所以我尝试使用ImageButton类,我得到一个例外,它必须运行=“服务器“属性。
我在计划中添加了所有控件。
对我来说最奇怪的是,Image这个类并没有给予任何激励,但使用了一个继承自他的类。
所以我的qustion是:它可能通过c#代码添加并检查控件是否具有runat =“server”属性?
(对不起我的英文)
这是我的一些代码:
protected void Page_Load(object sender, EventArgs e)
{
string key = "*****************";
string secret = "***********";
MyFlicker myFlicker = new MyFlicker(key, secret);
int photoCount = myFlicker.coll.Count;
try
{
string[] urls = myFlicker.GetPhotosURLS();
string[] desc = myFlicker.GetPhotosDescreptions();
string[] Titels = myFlicker.GetPhotosTitle();
Panel[] panels = new Panel[photoCount];
ImageButton[] images = new ImageButton[photoCount];
Label[] descreptions = new Label[photoCount];
Label[] titles = new Label[photoCount];
for (int i = 0; i < photoCount; i++)
{
panels[i] = new Panel();
images[i] = new ImageButton();
descreptions[i] = new Label();
titles[i] = new Label();
titles[i].Text = Titels[i] + ":כותרת התמונה";
images[i].ImageUrl = urls[i];
if (descreptions[i] != null)
descreptions[i].Text ="תיאור התמונה: " + desc[i];
else
descreptions[i].Text = "descreption was not found!";
panels[i].ID = "panel" + i;
images[i].ID = "image" + i;
descreptions[i].ID = "des" + i;
titles[i].ID = "titles" + i;
panels[i].Controls.Add((Label)titles[i]);
panels[i].Controls.Add((Label)descreptions[i]);
panels[i].Controls.Add((Image)images[i]);
this.Controls.Add((Panel)panels[i]);
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
这是apsx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Copy_of_galleryControlTest_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
答案 0 :(得分:2)
在进行类似于此代码的测试后,我收到了此错误
'ImageButton'类型的控件'ctl03'必须放在表单标签内 使用runat = server。
然后我改变了
this.Controls.Add((Panel)panels[i]);
到
form1.Controls.Add((Panel)panels[i]);
现在它有意义.. ImageButton是一个提交控件(一个控件可以提交表单),所以这就是为什么这个错误,控件需要是form1的一个子而不是在它之外
另一种解决方法是覆盖此方法,但我建议使用第一个
public override void VerifyRenderingInServerForm(Control control)
{
;
}