簡體   English   中英

如何從數據列表中的文本框獲取文本值

[英]how to get Text value from TextBox in Datalist

當我單擊LinkBut​​ton時,我試圖從TextBox檢索Text值,兩者都在DataList的ItemTemplate中。但它返回的是空值。

這是aspx頁面中數據列表的代碼:

 <asp:DataList ID="DataList1" runat="server" Width="100%" DataKeyField="UserId" OnItemCommand="itemcommand"
                OnItemDataBound="Data_Bind">
                <ItemTemplate>
                    <table style="width: 100%">
                        <tr>
                            <td>
                                <a href="<%#System.String.Format("ViewProfile.aspx?aid={0}",Eval("UserId")) %>">
                                    <asp:Image ID="Img" Width="100px" Height="80px" BorderStyle="Inset" BorderWidth="2px"
                                        BorderColor="Aqua" runat="server" ImageUrl='<%#System.String.Format("../Content/Upload/{0}", Eval("UserDetail.UserPhoto")) %>' />
                            </td>
                            <td >
                                <asp:Label ID="name" runat="server" Text='<%#Eval("UserDetail.Firstname")%>'></asp:Label>
                                <asp:Label ID="lastname" runat="server" Text='<%#Eval("UserDetail.Lastname")%>'></asp:Label>
                            </td>
                            <td>
                                <asp:Label ID="post" runat="server" Text='<%#Eval("Post.post")%>'></asp:Label>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="3">
                                <asp:LinkButton ID="Like" runat="server" CommandName="onLike" CommandArgument='<%# Eval("Post.PostId") %>'>Like</asp:LinkButton>
                                <asp:Label ID="lk" runat="server"></asp:Label>
                                <asp:LinkButton ID="Share" runat="server" CommandName="onShare" CommandArgument='<%# Eval("Post.PostId") %>'>Share</asp:LinkButton>
                                <asp:Label ID="sh" runat="server"></asp:Label>
                            </td>
                        </tr>
                        <tr>
                        <td colspan="3">
                          <asp:TextBox ID="txtcomment"  runat="server" Height="40px" Text="abc" Width="600px"></asp:TextBox>
                          <input type="text" id="cmnt1" name="cmnt1" runat="server" />
                           &nbsp;
                            <asp:LinkButton ID="Comment" runat="server" CommandName="onComment" CommandArgument='<%# Eval("Post.PostId") %>'>Comment</asp:LinkButton>
                        </td>
                        </tr>
                        <tr>
                            <td colspan="3">
                                <asp:DataList ID="DataList2" runat="server">
                                    <ItemTemplate>
                                        <table>
                                            <tr>
                                                <td>
                                                    <asp:Image ID="Img2" Width="50px" Height="40px" BorderStyle="Inset" BorderWidth="2px"
                                                        BorderColor="Aqua" runat="server" ImageUrl='<%#System.String.Format("../Content/Upload/{0}", Eval("UserDetail.UserPhoto")) %>' />
                                                    <asp:Label ID="fname" runat="server" Text='<%#Eval("UserDetail.Firstname")%>'></asp:Label>
                                                    <asp:Label ID="lname" runat="server" Text='<%#Eval("UserDetail.Lastname")%>'></asp:Label>
                                                </td>
                                                <td>
                                                    <asp:Label runat="server" ID="cmnts" Text='<%#Eval("Comments.Comment")%>'></asp:Label>
                                                </td>
                                            </tr>
                                        </table>
                                    </ItemTemplate>
                                </asp:DataList>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>

            </asp:DataList>

這是背后的代碼:

 protected void itemcommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "onLike")
        {
            var k = e.CommandArgument;

            User ObjUser = new User();
            ObjUser = (User)Session["user"];
            ObjUser.Post.PostId = Convert.ToInt64(k);

            PostService.OnLike(ObjUser);

            DataList1.DataSource = PostService.GetPosts(ObjUser);
            DataList1.DataBind();
        }
        if (e.CommandName == "onComment")
        {
            var k = e.CommandArgument;

            TextBox cmnt = (TextBox) e.Item.FindControl("txtcomment");
            HtmlInputText cmnt1 = (HtmlInputText)e.Item.FindControl("cmnt1");
            User ObjUser = new User();
            ObjUser = (User)Session["user"];
            ObjUser.Post.PostId = Convert.ToInt64(k);
            ObjUser.Comments.Comment = cmnt.Text;

            PostService.OnComment(ObjUser);

            DataList1.DataSource = PostService.GetPosts(ObjUser);
            DataList1.DataBind();

        }
        if (e.CommandName == "onShare")
        {
            var k = e.CommandArgument;

            User ObjUser = new User();
            ObjUser = (User)Session["user"];
            ObjUser.Post.PostId = Convert.ToInt64(k);

            PostService.OnShare(ObjUser);

            DataList1.DataSource = PostService.GetPosts(ObjUser);
            DataList1.DataBind();

        }

    }

FindControl不會遞歸搜索控件。 它只會在當前子級中尋找控件。 給定您正在使用的結構,您將必須在該項的子控件中進行搜索。

您將必須編寫自己的遞歸函數以在所有子級中搜索此控件。

或者,您可以編寫擴展方法,以便可以使用它來遞歸搜索所需的位置。 我在這里找到的此功能應該會有所幫助。

public static class ControlExtensions
{
    public static Control FindControlRecursive(this Control control, string id)
    {
        if (control == null) return null;
        //try to find the control at the current level
        Control ctrl = control.FindControl(id);
        if (ctrl == null)
        {
            //search the children
            foreach (Control child in control.Controls)
            {
                ctrl = FindControlRecursive(child, id);
                if (ctrl != null) break;
            }
        }
        return ctrl;
    }
}
asp:TextBox ID="txtQuantity"  runat="server"></asp:TextBox

string Key = Datalist.DataKeys[e.Item.ItemIndex].ToString();

TextBox Textboxvalue = (TextBox)(e.Item.FindControl("txtQuantity"));

//You will get the value in Textboxvalue 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM