回发中的ID出错

时间:2013-11-20 02:36:44

标签: c# asp.net postback

我有一个下拉列表,我用db中的数据填充它,在选择下拉列表项时,将根据选择动态生成按钮。

但是我遇到了这个错误:

  无法找到

,或者为同一ID分配了不同的控件   回发后。如果未分配ID,请显式设置ID   控制的属性,用于引发回发事件以避免此错误。

这些是我的代码:

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
          BindActivity();
        }

         if (dropListActivity.SelectedIndex != 0)
        {
                PopulateButtons(Convert.ToInt32(dropListActivity.SelectedValue));
                StoryIcons();
       }      

    }
   protected void BindActivity()
        {
            dropListActivity.DataSource = daoActivity.GetAll();
            dropListActivity.DataTextField = "ActivityName";
            dropListActivity.DataValueField = "ActivityID";
            dropListActivity.DataBind();

            dropListActivity.Items.Insert(0, new ListItem(String.Empty, String.Empty));
            dropListActivity.SelectedIndex = 0;
        }

PopulateButtons太长了所以我只想发布一半(因为我不知道它是否相关)。

  protected void PopulateButtons(int id)
    {
       // IList<ModelSQL.task> lol = daoTask.GetBasedOnKey(id);
        IList<ModelSQL.ActivityTask> actTask = daoActivityTask.GetBasedOnKey(id);
        foreach (ModelSQL.ActivityTask task in actTask)
        {

            if(task.GroupID == null)
             {
                ImageButton test = new ImageButton();
                 test.ImageUrl = daoTask.GetURL(id, task.taskID);
                 test.ToolTip = daoTask.GetTaskName(task.taskID);
                 test.Width = 100;
                 test.Height = 100;

                 test.Click += (source, e) =>
                 {
                     // Question(Convert.ToInt32(dropListActivity.SelectedValue),Convert.ToInt32(taskid.Text));
                     Session["activityID"] = dropListActivity.SelectedValue;
                     Session["taskID"] = daoTask.GetID(test.ToolTip , id);
                     Response.Redirect("DisplayQuestion.aspx");
                 };
                 Literal lc = new Literal();
                 lc.Text = "&nbsp;";
                 AddToPanels(test);
                 AddToPanels(lc);
                 i++;
             }                         
        } // end of foreach where groupid = null

我试图通过

分配控件ID
  

test.ID =“name”+ i.ToString;

我将继续为每个循环增加值。我也试试

  

test.ID = this.UniqueID +“name”+ i.ToString;

然而它不起作用。

1 个答案:

答案 0 :(得分:0)

在调用Page.LoadViewState方法之前,必须在某处重新创建动态创建的控件。最好的地方是Page_Init。否则,当页面将尝试为这些控件加载viewstate时,它将找不到它们(因为它们仍未创建)并且失败。

例如,您可以在会话中保存DDL所选项目值,并在从Page_Init

调用PopulateButtons时使用session参数作为参数