2015-06-24 1 views
0

У меня разные типы сущностей и в зависимости от того, на какой объект нажата (выпадающий список) количество и типы загружаемых файлов, которые необходимы, различны каждый раз.Динамическая кнопка не запускает событие клика или жизненный цикл страницы для кнопки (не динамически)

Таким образом, я создаю несколько динамических элементов управления загрузкой в ​​динамической таблице с кнопкой динамической загрузки, чтобы одновременно загружать все файлы (я также попытался добавить кнопку на странице asp.net). Все создает отлично, и я могу выбрать файлы для загрузки.

Проблема, с которой я столкнулась, заключается в том, что динамическое управление кнопками не запускает событие onclicked, поэтому я не могу сохранить файлы. Я попытался создать кнопку на стороне asp.net, которая срабатывает, но из-за жизненного цикла страницы она не собирает элементы управления загрузкой.

Затем я попытался добавить событие OnInit и создал там динамическую кнопку, а остальную часть динамических элементов загрузки для выбранного изменения индекса выпадающего списка, но затем все создается, за исключением элементов управления динамической загрузкой. Затем запускается событие клика. (это делает Page_Init).

Желательно, чтобы кнопка не была динамической, но добиралась до элементов управления загрузкой файлов, чтобы сохранить файлы. Есть ли способ вокруг жизненного цикла страницы, который я могу достичь, или кто-нибудь может сказать мне, что я делаю неправильно? Или как я могу заставить динамическую кнопку запускать событие click?

Любая помощь будет принята с благодарностью ....

Вот мой код, что я сделал:

protected void lstLegalEntity_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (CTflag == false) 
     { 
      this.Rows = tblRow; 
      this.Columns = tblCol; 

      lblAmountOfRows.Text = "4"; 
      CreateDynamicTable(); 
     } 
     else 
     { 
      CTflag = true; 
     } 

     clrControls(); 
    } 

    protected void CreateDynamicTable() 
    { 
     string filterstring = ""; 
     filterstring = "SELECT let.ID, UploadType " + 
         "FROM [dbo].[AssetContract_LegalEntityLinks] lel " + 
         "INNER Join [dbo].[AssetContract_LegalEntity] le " + 
         "ON lel.LegalEntityRef = le.ID " + 
         "INNER JOIN [dbo].[AssetContract_LegalEntityTypes] let " + 
         "ON lel.LegalTypeRef = let.ID " + 
         "WHERE lel.LegalEntityRef = @LegalEntityRef "; 

     cn = new SqlConnection(GetConnectionString()); 
     SqlCommand myCmd = new SqlCommand(); 
     myCmd.CommandText = filterstring; 
     myCmd.Connection = cn; 
     myCmd.CommandType = CommandType.Text; 

     if (lstLegalEntity.SelectedValue != "") 
     { 
      myCmd.Parameters.AddWithValue("@LegalEntityRef", Convert.ToInt32(lstLegalEntity.SelectedValue)); 
     } 
     else 
     { 
      myCmd.Parameters.AddWithValue("@LegalEntityRef", Convert.ToInt32(0)); 
     } 

     cn.Open(); 
     SqlDataReader myReader = myCmd.ExecuteReader(); 

     tblRow = GetUploadControlsCount(); 

     if (CTflag == false) 
     { 
      table.Caption = "Upload Requirements"; 
      table.ID = "Upload Requirements"; 
      table.BackColor = System.Drawing.Color.BurlyWood; 
      divFileUploads.Controls.Add(table); 

      for (i = 0; i < 1; i++) 
      { 
       row = new TableRow(); 
       row.BorderStyle = BorderStyle.Ridge; 

       for (j = 0; j <= tblCol; j++) 
       { 
        cell = new TableCell(); 
        cell.BorderWidth = 5; 
        cell.BorderStyle = BorderStyle.Ridge; 
        cell.BorderColor = System.Drawing.Color.Azure; 
        for (j = 0; j <= tblCol; j++) 
        { 
         string[] Header = { "Upload Type", "File" }; 
         Label lbl = new Label(); 
         lbl.ID = "lblHeader" + j; 
         if (j == 1) 
         { 
          lbl.Width = 220; 
         } 
         else 
         { 
          lbl.Width = 100; 
         } 
         lbl.Text = Header[j]; 

         cell.Controls.Add(lbl); 
        } 
        row.Cells.Add(cell); 
       } 

       table.Rows.Add(row); 
      } 

      int readCount = 1; 
      while (myReader.Read()) 
      { 

       for (i = 0; i < 1; i++) 
       { 
        row = new TableRow(); 
        row.ID = "rw" + myReader["UploadType"].ToString(); 
        row.BorderStyle = BorderStyle.Ridge; 

        for (j = 0; j <= tblCol; j++) 
        { 
         cell = new TableCell(); 
         cell.ID = tbColId + i + j + myReader["UploadType"].ToString(); ; 
         cell.BorderWidth = 5; 
         cell.BorderStyle = BorderStyle.Ridge; 
         cell.BorderColor = System.Drawing.Color.Azure; 

         for (j = 0; j <= 0; j++) 
         { 
          Label lbl = new Label(); 
          lbl.ID = "lblCCRow" + i + "Col" + j + myReader["UploadType"].ToString(); 
          lbl.Text = myReader["UploadType"].ToString(); 
          lbl.Width = 100; 
          // Add the control to the TableCell 
          cell.Controls.Add(lbl); 
         } 

         for (j = 0; j < 1; j++) 
         { 
          fileUp = new FileUpload(); 
          //m = i; n = j; 
          fileUp.ID = filename + i + readCount.ToString(); 
          fileUp.Width = 350; 
          cell.Controls.Add(fileUp); 
          cmdArg = fileUp.ID; 
         } 

         row.Cells.Add(cell); 
        } 

        table.Rows.Add(row); 
        readCount++; 
       } 

       i = 0; 
       j = 0; 
      } 

      for (i = 0; i < 1; i++) 
      { 
       rrow = new TableRow(); 
       rrow.ID = "ResultRow"; 
       rrow.BorderStyle = BorderStyle.Ridge; 
       rrow.HorizontalAlign = HorizontalAlign.Center; 

       for (j = 0; j <= tblCol; j++) 
       { 
        rcell = new TableCell(); 
        rcell.ID = "resultCol" + j; 
        rcell.BorderWidth = 5; 
        rcell.BorderStyle = BorderStyle.Ridge; 
        rcell.BorderColor = System.Drawing.Color.Azure; 

        for (j = 0; j < 1; j++) 
        { 
         btnUpload = new Button(); 
         btnUpload.Width = 100; 
         btnUpload.Text = "Upload"; 
         btnUpload.ID = btnUpload.Text; 
         rcell.Controls.Add(btnUpload); 
         btnUpload.Click += new EventHandler(UpLdButton_Click); 
        } 

        rrow.Cells.Add(rcell); 
       } 
       table.Rows.Add(rrow); 
      } 

      CTflag = true; 
      ViewState["dynamictable"] = true; 

      cn.Close(); 
      myReader.Close(); 
     } 
    } 

    protected void UpLdButton_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < tblRow; i++) 
     { 
      fileUp = (FileUpload)FindControlRecursive(this, string.Format("fileUpLoader{0}{1}", 0, i)); 
     //rest of code to save file 
     } 
    } 

ответ

1

Почему бы вам не использовать asp-ретранслятор для отображения FileUploads?

вы можете легко установить шаблон HTML и дизайн, как и использование DataSource DataTable ваших данных

<asp:repeater id='rp' runat='server'> 
<ItemTemplate> 
<%Eval("UploadType"%> -this is the caption 

    <asp:fileUpload id='file' runat='server'/> 
    <asp:Button id='btnUpload' onclick='UploadClick' runat='server'/> 

</ItemTemplate> 

protected void lstLegalEntity_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //get data into DataTable 
     rp.DataSource=dt; 
     rp.DataBnd(); 
} 


    protected void UpLdButton_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < tblRow; i++) 
    { 
     //this way you get the relevant fileUpload 
     fileUp = (FileUpload)((Button)Sender).Parent.FindControl ("file); 

    //rest of code to save file 
    } 
} 
1

Вы были на правильном пути, когда вы добавили динамические кнопки в случае OnInit - вам просто нужно было также добавить элементы управления FileUpload.

Все элементы управления необходимо воссоздавать при каждой обратной передаче. .NET автоматически обрабатывает элементы управления, добавленные на страницу ASPX. Вы несете ответственность за динамические элементы управления, которые вы добавляете программно.

Вот несколько подходов можно взять, где вы находитесь:

  1. Продолжить динамическое добавление элемента управления, но внести изменения, так что вы добавляете все элементы управления, а не только кнопки.

  2. Если у вас есть известный максимум числа элементов управления, вы можете добавить все и управлять отображением с помощью свойства Visible. Это работает, когда количество элементов управления невелико. Похоже, вы кладете границы вокруг ячеек таблицы, чтобы это не выглядело так хорошо в вашем случае. Если вы можете изменить макет, чтобы скрыть элементы управления, это не приведет к остаточным артефактам, это вариант.

+0

Благодарности @Gridly за советы.Проблема в том, что элемент должен быть выбран из раскрывающегося списка и извлекать данные до того, как файлы могут быть созданы. Количество выгрузок также будет отличаться, особенно потому, что новые объекты с их типами загрузки могут создаваться «на лету» и система должен быть в состоянии справиться с этим ... Я создал ретранслятор, который делает трюк :) спасибо, хотя – Kerieks

 Смежные вопросы

  • Нет связанных вопросов^_^