【问题标题】:Getting value from textarea in ASP.NET repeater?从 ASP.NET 中继器中的 textarea 获取价值?
【发布时间】:2015-09-21 15:40:49
【问题描述】:

我有一个 asp.net 转发器控件,显示来自 sql db 的数据。 我在每条记录旁边显示了删除、编辑和保存按钮,有点像管理员。

当点击edit 时,隐藏的文本框会出现在显示数据的文字位置。 单击save 时,应将新值保存到数据库(它们是),并且文字显示新值。

但新值字符串返回为空字符串。它们不为空,但字符串不包含字符!

当我有两个 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 转发器模板...

<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>

为什么两个字符串在正确返回之前都返回空?

【问题讨论】:

    标签: c# asp.net repeater


    【解决方案1】:

    在 ASP.NET 中,当您将 visible 设置为 false 时,控件不会在页面上呈现。

    了解更多see MSDN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多