从中继器中的文本框获取值 asp.net c#

发布于 2024-12-20 12:49:55 字数 1666 浏览 0 评论 0原文

我已经尝试让它工作几个小时了,但谷歌没有任何东西可以帮助我解决问题。

我有一个非常简单的转发器控件:

   <asp:Panel ID="userDefDiv" Visible="false" runat="server">
                <asp:Repeater ID="userDefRepeater" EnableViewstate="false" runat="server">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" EnableViewState="false"></asp:TextBox><br/>
                    </ItemTemplate>
                </asp:Repeater>
            </asp:Panel>

userDefDiv 面板位于另一个面板内,该面板位于 contentPLaceHolder 内。 userDefDiv 的父面板没有“enableviewstate=”false””。

所以。 此页面上的所有内容都会在几次 linkbuttons_click 后发生。所以在 page_load 期间什么也没有发生。在我单击另一个链接按钮后,我想从中继器内的不同文本框中获取数据。

C# 代码:

这是创建所有中继器项目的代码。

public void createUserDef()
{
        DataTable userDefData;
        userDefData = ..... (data from Database.)

            userDefDiv.Visible = true;
            userDefRepeater.DataSource = userDefData;
            userDefRepeater.DataBind();
}

链接按钮的代码:

protected void linkButton_Click(object sender, EventArgs e)
{
    createUserDef();

    Label2.Visible = true;
    foreach (RepeaterItem item in userDefRepeater.Items)
    {
        TextBox box = (TextBox)item.FindControl("TextBox1");
        string b = box.Text;
        Label2.Text += b + " . ";
    }
}

如您所见,我在单击期间再次创建了转发器。但我唯一能在 label2 中读到的东西。是一个数字“.”,位于每个文本框的点上。 但文本框中的文本是空的.. 我做错了什么?

感谢您的阅读! Mattias

解决方案:

  1. 将 EnableVIewState="true" 添加到文本框 &中继器。

  2. 在获取值之前不要调用 call dataBind()。

谢谢!

I've been trying to get this working for a couple of hours now but nothing from google could help me fix the problem.

I have a very simple repeater control:

   <asp:Panel ID="userDefDiv" Visible="false" runat="server">
                <asp:Repeater ID="userDefRepeater" EnableViewstate="false" runat="server">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" EnableViewState="false"></asp:TextBox><br/>
                    </ItemTemplate>
                </asp:Repeater>
            </asp:Panel>

the userDefDiv panel is inside another panel, which is inside contentPLaceHolder.
the parent panel to userDefDiv does NOT have the "enableviewstate="false"".

So.
Everything on this page happens after a couple of linkbuttons_click. so nothing happens during page_load. And after i click another linkbutton i want to get the data from the different textboxes that is within the repeater.

C# code:

This is the code to create all the repeater items.

public void createUserDef()
{
        DataTable userDefData;
        userDefData = ..... (data from Database.)

            userDefDiv.Visible = true;
            userDefRepeater.DataSource = userDefData;
            userDefRepeater.DataBind();
}

The code for the linkbutton:

protected void linkButton_Click(object sender, EventArgs e)
{
    createUserDef();

    Label2.Visible = true;
    foreach (RepeaterItem item in userDefRepeater.Items)
    {
        TextBox box = (TextBox)item.FindControl("TextBox1");
        string b = box.Text;
        Label2.Text += b + " . ";
    }
}

As you see i create the repeater once again during the click. But the only thing i can read in label2. is a a number of " .", on dot for each textbox.
but the text from the textbox is empty..
What am I doing wrong??

thanks for reading!
Mattias

SOLUTION:

  1. add EnableVIewState="true" to textbox & repeater.

  2. Dont call call dataBind() before you get the values.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光暖心i 2024-12-27 12:49:56

您需要将 EnableViewState 设置为“true”,链接按钮才能在转发器中正常工作

You need to set EnableViewState to 'true' for linkbuttons to work properly in a repeater

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文