【问题标题】:How to get input value of dynamically added textboxes如何获取动态添加的文本框的输入值
【发布时间】:2016-12-08 07:51:54
【问题描述】:

我在 asp.net 中有一个简单的表单,我在其中使用 LINQ to SQL 将一些数据添加到数据库。

单击按钮时,我会动态加载更多文本框。所有这些文本框都有计数器并在每次加载时获得不同的 id。

我想知道,如何从那些动态添加的文本框中获取输入值,以便我可以将该数据输入到数据库中。

意思是,如果用户在文本框中输入“指环王”,我想在代码隐藏中获取该数据并将其添加到数据库中。

很容易进入基本形式,我只是这样做:inputValue.Text,但使用不同的 id,我有点迷路了......

我的动态添加文本框的代码

protected void Button1_Click(object sender, EventArgs e)
    {
        counter++;
        TextBox tb1 = new TextBox();
        TextBox tb2 = new TextBox();
        TextBox tb3 = new TextBox();
        TextBox tb4 = new TextBox();
        tb1.ID = "inputAuthor" + counter;
        tb2.ID = "inputBookName" + counter;
        tb3.ID = "inputCategory" + counter;

        LiteralControl lineBreak = new LiteralControl("<br/>");
        ph1.Controls.Add(tb1);
        ph1.Controls.Add(lineBreak);
        controlIdList.Add(tb1.ID);
        ph1.Controls.Add(tb2);
        ph1.Controls.Add(lineBreak);
        controlIdList.Add(tb2.ID);
        ph1.Controls.Add(tb3);
        ph1.Controls.Add(lineBreak);
        controlIdList.Add(tb3.ID);
        ph1.Controls.Add(tb4);
        ph1.Controls.Add(lineBreak);
        controlIdList.Add(tb4.ID);
        ViewState["controlIdList"] = controlIdList;  
    }

更新

动态添加的文本框

<input name="dnn$ctr1365$Author$inputAuthor1" id="dnn_ctr1365_Author_inputAuthor1" type="text">
<input name="dnn$ctr1365$BookName$inputBookName1" id="dnn_ctr1365_BookName_inputBookName1" type="text">
<input name="dnn$ctr1365$Category$inputCategory1" id="dnn_ctr1365_Category_inputCategory1" type="text">

默认 .aspx 格式

<input name="dnn$ctr1365$Author$inputAuthor" id="dnn_ctr1365_Author_inputAuthor" class="form-control" style="background:#fff" type="text">

【问题讨论】:

  • 请提供在浏览器上呈现的html。
  • 你是这个意思吗? (请参阅更新)。哦,顺便说一句,这是我正在创建的 dnn 模块@Bharat
  • 好的,所以我认为这些 id 是客户端 id,只需在该 html 中添加一个标签,即 Runat = "server" 或使其成为 asp:net 文本框
  • 我现在如何获取输入值? @巴拉特

标签: c# asp.net forms linq dynamic-programming


【解决方案1】:

您的流程应该如下所示。

<asp:TextBox ID="dnn_ctr1365_Author_inputAuthor" name="dnn$ctr1365$Author$inputAuthor" class="form-control" style="background:#fff" runat="server"></asp:TextBox>

并从后端检索数据。

string value = dnn_ctr1365_Author_inputAuthor.Text.toString();

这样的事情会帮助你。 我没有测试过那个代码,只是把它写成流程应该的样子。

查看此链接,它们将帮助您了解 asp.net 网络表单控件。

https://asp-net-example.blogspot.in/2008/10/textbox-example-how-to-use-textbox.html

【讨论】:

  • 但这只会获取我的默认文本框的值,而不是动态添加的具有不同 id 的文本框的值...
  • 好的,现在我明白了您的问题,我认为这不是绑定此类控件的好方法。如果您设法在 html 中添加 runat 代码,您的代码仍然会运行。
  • 从代码隐藏中获取文本框的值从来都不是一件难事...很难获取动态创建的文本框的值,因为我不知道如何遍历它们的 id
【解决方案2】:

如果我理解正确的话。您正在代码隐藏处生成动态文本框。并且您的文本框能够在后端通知更改。

为此。首先,您必须接受在 .Net 上没有像 winform 这样的丰富的 eventHandler 池。只有 TextChanged 事件,它的行为类似于 onBlur 或 mouseLeave。

要实现这一点,您的动态文本框将类似于

protected void Page_Load(object sender, EventArgs e)
{
    TextBox tb1 = new TextBox();
    tb1.ID = "t1";    
    tb1.Attributes.Add("runat", "server");
    tb1.AutoPostBack = true;
    addEvent(tb1,tb1.ID);
    panel.Controls.Add(tb1);
}

private void addEvent(TextBox tb1,string id)
{
    tb1.TextChanged += (senders, eventArgs) =>
    {
        //do Something with the ID
    };    
}

主要是把AutoPostBack设置为true,这样t1的TextChanged就可以在后端被抓到了。

之后,动态文本框的每次更改都会触发 t1_TextChanged。这样您以后就可以使用数据库了。

【讨论】:

  • 你是什么意思用 id 做某事?可以发个例子吗?
  • 主机的问题很少,1:动态生成文本框,2:后端可以从文本框通知事件,//用ID做一些事情。这是与来自后端的数据库和数据的通信,我认为这不是这个问题的一部分
  • 通过这种方式,可以生成任意数量的动态文本框,并为每一个添加事件,每一个都可以//用ID做一些事情,还可以获取inside的文本该事件,您可能需要检查stackoverflow.com/questions/14337057/…
  • 将尝试反馈
猜你喜欢
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 2015-05-03
  • 2021-08-24
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多