ImageButton和runat=服务器属性

本文关键字:服务器 属性 runat ImageButton | 更新日期: 2023-09-27 18:25:45

我用闪烁API做了一些测试,在我更改代码中的一些控件后,我遇到了一个wierd问题。

当我第一次尝试重新请求图像时,我将它们存储在一个图像中,每件事都很好,但我想对图像做其他事情,所以我尝试使用ImageButton类,但我得到了一个例外,它必须具有run="server"属性。

我通过程序添加了所有控件。

更让我惊讶的是,Image类没有给出任何解释,但使用了继承自他的类。

所以我的问题是:是否可以通过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>

ImageButton和runat=服务器属性

在进行了类似于此代码的测试后,我得到了以下错误

"ImageButton"类型的控件"ctl03"必须放置在表单标记内runat=server。

然后我换了

this.Controls.Add((Panel)panels[i]);

form1.Controls.Add((Panel)panels[i]);

现在这是有道理的。。ImageButton是一个提交控件(一个将提交表单的控件),所以这就是为什么会出现此错误,该控件需要是form1的子控件,而不是在它之外

另一个解决方法是覆盖此方法,但我建议使用第一个

public override void VerifyRenderingInServerForm(Control control)
{
    ;
}