【问题标题】:how to get textbox value in placeholder on code behind?如何在代码后面的占位符中获取文本框值?
【发布时间】:2015-02-25 20:38:54
【问题描述】:

我创建了一些文本框,我想动态获取它们的值。 简而言之,我解释一下我的页面:

我的下拉列表有数字 1 到 15。当用户选择数字时,我将文本框创建为所选数字。 例如;用户选择 3,我创建 3 个文本框,用户在文本框中写一些东西。 这是我的代码: aspx 侧:

  <asp:DropDownList ID="ddlUserSelected" AutoPostBack="true" OnSelectedIndexChanged="ddlUserSelected_SelectedIndexChanged" runat="server">
 <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
 <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"/>

代码背后:

    protected void ddlUserSelected_SelectedIndexChanged(object sender, EventArgs e)
    {
     for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
            {

                TextBox txtDate = new TextBox();
                Label lbl = new Label();          
                lbl.Text = "<br/>";        
                txtDate .Width = 70;
                txtDate .CssClass = "tbl";
                txtDate .ID = "txtDate" + a;                  
                PlaceHolder1.Controls.Add(txtDate);            
                PlaceHolder1.Controls.Add(lbl);

            }
}

我还有保存按钮。

protected void btnSave_Click(object sender, EventArgs e)
{

   for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
    {              
      //I want to get each textbox value               
    }

}

注意:for循环没关系(可以去掉)我的主要目的是获取文本框的值。

如何在btnSave_Click 方法中获取文本框值?

【问题讨论】:

  • 您可以将文本框添加到文本框列表中,然后循环并获取其值或遍历表单并获取文本框控件
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# asp.net webforms textbox placeholder


【解决方案1】:

问题

如果您将控件动态添加到页面,则需要在 Page InitPage Load 上重新加载它们。

否则,您在回帖时将无法找到它们。

ASPX

<asp:DropDownList ID="ddlUserSelected" AutoPostBack="true" 
    OnSelectedIndexChanged="ddlUserSelected_SelectedIndexChanged" 
    runat="server">
    <asp:ListItem Text="Select one" />
    <asp:ListItem Text="1" />
    <asp:ListItem Text="2" />
    <asp:ListItem Text="3" />
    <asp:ListItem Text="4" />
    <asp:ListItem Text="5" />
</asp:DropDownList>
<br/>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"/>
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />

代码隐藏

private int Total
{
    get
    {
        int total;
        if (Int32.TryParse(ddlUserSelected.SelectedItem.Text, out total)) 
            return total;
        return 0;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    CreateTextBoxes(Total);
}

protected void ddlUserSelected_SelectedIndexChanged(object sender, EventArgs e)
{
    CreateTextBoxes(Total);
}

protected void btnSave_Click(object sender, EventArgs e)
{
    int total = Total;
    for (int a = 1; a <= total; a++)
    {
        var textbox = PlaceHolder1.FindControl("txtDate" + a) as TextBox;
    }
}

private void CreateTextBoxes(int total)
{
    for (int a = 1; a <= total; a++)
    {
        // Make sure we do not add same ID again
        if (PlaceHolder1.FindControl("txtDate" + a) == null)
        {
            TextBox txtDate = new TextBox();
            Label lbl = new Label();
            lbl.Text = "<br/>";
            txtDate.Width = 70;
            txtDate.CssClass = "tbl";
            txtDate.ID = "txtDate" + a;
            PlaceHolder1.Controls.Add(txtDate);
            PlaceHolder1.Controls.Add(lbl);
        }
    }
}

【讨论】:

    【解决方案2】:

    下面的代码会帮助你

     protected void ddlUserSelected_SelectedIndexChanged(object sender, EventArgs e)
      {
        for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
        {
    
            TextBox txtDate = new TextBox();
            Label lbl = new Label();
            lbl.Text = "<br/>";
            txtDate.Width = 70;
            txtDate.CssClass = "tbl";
            txtDate.ID = "txtDate" + a;
            PlaceHolder1.Controls.Add(txtDate);
            PlaceHolder1.Controls.Add(lbl);
    
        }
      }
      protected void btnSave_Click(object sender, EventArgs e)
      {
    
        for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
        {
            if(Request.Form.Get("txtDate" + a.ToString()) != null)
            {
                var str = Request.Form.Get("txtDate" + a.ToString());
            }        
        }
      }
    

    如果您使用母版页,请使用以下代码

            if (Request.Form.Get("ctl00$ContentPlaceHolder1$txtDate" + a.ToString()) != null)
            {
                var str = Request.Form.Get("ctl00$ContentPlaceHolder1$txtDate" + a.ToString());
            }
    

    【讨论】:

    • 我在文本框中输入了一些值,但 'var str' 值为空
    • 这是不可能的,因为我在设置值之前已经添加了条件。我已经测试过了,它工作正常。
    • 你是对的,但我不使用 if 语句。当使用 if 语句时已经没有到达 'var str'
    • 在您的代码中,当您创建一个控件时,您在 txtDate.ID = "txtDate" + a; 中分配空间所以只需删除它,它就可以正常工作,否则在保存点击事件中应用空间,如 var str = Request.Form.Get("txtDate " + a.ToString());.
    • 我找不到任何空间 ID 名称。它们都是相同的“txtDate”+a
    【解决方案3】:
    protected void btnSave_Click(object sender, EventArgs e)
                {
    
                   for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
                    {              
                         string value = Request.Form["txtDate" + a];
                    }
    
                }
    

    【讨论】:

      猜你喜欢
      • 2019-09-02
      • 2016-10-25
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2015-12-15
      相关资源
      最近更新 更多