2014-11-28 2 views
0

У меня есть ретранслятор asp.net, отображающий данные из sql db. Я удаляю, редактирую и сохраняю кнопки, отображающие рядом с каждой записью, вроде администратора.Получение значения из textarea в репитере ASP.NET?

При нажатии на кнопку edit скрытые текстовые поля появляются вместо литералов, которые отображают данные. Когда нажата кнопка save, новые значения должны быть сохранены в db (какие они есть), а литералы отображают новое значение.

Но новые строки значений возвращаются как пустые строки. Они не являются нулевыми, но строка не содержит символов!

Это нормально работало, когда у меня было два TextBox, но когда я переключил один на HTMLTextArea, это произошло!

Вот мой соответствующий код ...

if (e.CommandName == "edit") 
    { 
     ((TextBox)e.Item.FindControl("Onebox")).Visible = true; 
     ((TextBox)e.Item.FindControl("Onebox")).Text = ((Literal)e.Item.FindControl("onelit")).Text; 
     ((HtmlTextArea)e.Item.FindControl("Threebox")).Visible = true; 
     ((HtmlTextArea)e.Item.FindControl("Threebox")).Value = ((Literal)e.Item.FindControl("threelit")).Text; 
     DataTable dt = new DataTable(); 
     DataTable dt2 = new DataTable(); 



     ((Literal)e.Item.FindControl("onelit")).Visible = false; 
     ((Literal)e.Item.FindControl("threelit")).Visible = false; 

     ((LinkButton)e.Item.FindControl("LinkButton2")).Visible = false; 
     ((LinkButton)e.Item.FindControl("LinkButton3")).Visible = true; 



    } 

    if (e.CommandName == "save") 
    {  

     string newoneval = ((TextBox)e.Item.FindControl("Onebox")).Text; 
     string newtwoval = ((HtmlTextArea)e.Item.FindControl("Threebox")).Value; 

     ((TextBox)e.Item.FindControl("Onebox")).Visible = false; 
     ((Literal)e.Item.FindControl("onelit")).Text = ((TextBox)e.Item.FindControl("Onebox")).Text; 
     ((HtmlTextArea)e.Item.FindControl("Threebox")).Visible = false; 
     ((Literal)e.Item.FindControl("threelit")).Text = ((HtmlTextArea)e.Item.FindControl("Threebox")).Value; 


     ((Literal)e.Item.FindControl("onelit")).Visible = true; 
     ((Literal)e.Item.FindControl("threelit")).Visible = true; 

     ((LinkButton)e.Item.FindControl("LinkButton2")).Visible = true; 
     ((LinkButton)e.Item.FindControl("LinkButton3")).Visible = false; 


     if(newoneval != null && newtwoval != null) 
     { 
      SqlDataReader dataReader; 
      String editstr = "update news set title = '" + newoneval + "', short_desc ='" + newtwoval + "' where pk_ID = @pk_ID"; 
      SqlCommand command = new SqlCommand(editstr, conn); 
      command.Parameters.AddWithValue("@pk_ID", e.CommandArgument); 
      try 
      { 
       conn.Open(); 
       dataReader = command.ExecuteReader(); 
       dataReader.Close(); 
       command.Dispose(); 
       conn.Close(); 
       BindRepeater(); 
      } 
      catch (Exception exc) 
      { 
       Response.Write(exc); 
      } 

     } 
     else 
     { 
      Response.Write("No value"); 
     } 

и вот шаблон жерех ретранслятор ...

<asp:Repeater ID="list_holder" runat="server" OnItemCommand="runCommands"> 
     <ItemTemplate> 
      <table> 
       <tr> 
        <!-- FIRST BOX CONTROLS ----------------> 
        <td class="cells"> 
         <asp:Textbox id="Onebox" 
          text='' 
          runat="server" 
          enabled="true" 
          visible="false"> 
         </asp:Textbox> 

         <asp:Literal id="onelit" 
          runat="server" 
          text='<%# DataBinder.Eval(Container.DataItem ,"title") %>' 
         /> 
        </td> 

        <td class="cells"> 
         <textarea id="Threebox" 
          text='' 
          runat="server" 
          enabled="true" 
          Visible="false"> 
         </textarea> 

         <asp:Literal id="threelit" 
          text='<%# DataBinder.Eval(Container.DataItem ,"short_desc") %>' 
          runat="server" 
         /> 
        </td> 
        <!--------------------------------------> 

        <!---- Link Buttons ------------------------> 
        <td class="cells"> 
         <asp:LinkButton ID="LinkButton1" 
          runat="server" 
          CommandName="delete" 
          OnClientClick='javascript:return confirm("Are you sure you want to delete?")' 
          CommandArgument='<%# DataBinder.Eval(Container.DataItem, "pk_ID") %>' 
          CausesValidation="false">Delete</asp:LinkButton> 
        </td> 

        <td class="cells"> 
         <asp:LinkButton ID="LinkButton2" 
          runat="server" 
          CommandName="edit" 
          CommandArgument='<%# DataBinder.Eval(Container.DataItem, "pk_ID") %>' 
          CausesValidation="false" 
          Visible ="true">Edit</asp:LinkButton> 

         <asp:LinkButton ID="LinkButton3" 
          runat="server" 
          CommandName="save" 
          CommandArgument='<%# DataBinder.Eval(Container.DataItem, "pk_ID") %>' 
          CausesValidation="false" 
          Visible ="false">Save</asp:LinkButton> 
        </td> 
        <!--------------------------------------------------> 
       </tr> 
      </table> 
     </ItemTemplate> 
    </asp:Repeater> 

Почему обе строки возвращаются пустыми, когда, прежде чем они возвращались правильно ?

ответ

0

В ASP.NET при установке видимого значения false элемент управления не отображается на странице.

Для получения дополнительной информации see MSDN.

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