Board.Append("<tr bgcolor=ffffff ><td width=150 rowspan=2 align=left>图片上传:</td><td align=left width=400px><input type=file name=imageUpload ID=imageUpload Width=460px />&nbsp;&nbsp;<input type=submit name=Button3 ID=Button3 value=上传图像 class=button /><br /><span style='color: #0000ff'>图片大小不能超超过2M</span></td><td rowspan=2 align=left width=150px><span ID=lblImage runat=server Height=120px Width=150px BorderStyle='Groove'></span></td></tr>");我用这种方法在页面上生成上传控件,但是在button3_click事件里使用的时候出错try
   {
     if (imageUpload.PostedFile.FileName == "")  
                    //CS0103: The name 'imageUpload' does not exist in the current context            {
                Response.Write("<Script>alert('请先选择上传的图片')</Script>");
                return;
            }
            else
            {提示是找不到控件,我想问下按这种方式生成的控件,应该如何使用

解决方案 »

  1.   

    这样生成的只是前台控件,也就是说浏览器会把这段文本解释成控件。对后台来说,根本就不是控件。要想在服务端直接处理事件,只能添加服务器端控件。用Controls.Add()
      

  2.   

    在<input 的后面加上runat="server"
      

  3.   

    我想说几点。第一,你这么生成的的文本框是客户端控件而不是服务端控件;第二,你根本就没有替这个文本框给一个click事件
      

  4.   

    什么条件下加个runat="server"就变成服务器控件了吗?不是的,只能在呈现的时候才可以。
      

  5.   

    三种做法:
    一、在页面上加个PlaceHolder控件作为容器,假设id为placeHolder1,添加上传控件代码如下:
    FileUpload upload=new FileUpload();
    upload.ID="imageUpload";
    placeHolder1.Controls.Add(upload);
    一定要用容器控件来作为占位符。
    二、将文件上传控件事先添加在页面上,默认为隐藏,某种条件让其显示,Visible=true;
    三、使用HTML控件而不是服务器控件。也就是你的做法,使用这种做法就不能在cs代码中直接采用成员变量的方式取值(所以你的做法编译不通过),但是可以通过Request["imageUpload"]来取值。
      

  6.   

    Board.Append(" <tr bgcolor=ffffff > <td width=150 rowspan=2 align=left>图片上传: </td> <td align=left width=400px> <input type=file name=imageUpload ID=imageUpload Width=460px />&nbsp;&nbsp; <input type=submit name=Button3 ID=Button3 value=上传图像 class=button runat="server" onserverclick="Button3_ServerClick"/> <br /> <span style='color: #0000ff'>图片大小不能超超过2M </span> </td> <td rowspan=2 align=left width=150px> <span ID=lblImage runat=server Height=120px Width=150px BorderStyle='Groove'> </span> </td> </tr>"); 
      

  7.   

    protected void Button1_ServerClick(object sender, EventArgs e)
        {
            try
            {
                if (imageUpload.PostedFile.FileName == "")
                //CS0103: The name 'imageUpload' does not exist in the current context 
                {
                    Response.Write(" <Script>alert('请先选择上传的图片') </Script>");
                    return;
                }
                else
                {
                }
            }
            catch(exception e)
            {        }
        }
      

  8.   


    这样还是不行的哇,只能用zhoufoxcn的方法,动态添加服务器控件了