【问题标题】:Array of textbox and labels how to get value in submit method in c#文本框和标签数组如何在 C# 中的提交方法中获取值
【发布时间】:2014-09-14 06:48:01
【问题描述】:

我曾经在下拉列表中动态创建标签和文本框选择索引更改方法以及如何在提交方法中获取这些文本框值...。

公共部分类 StudentMarklistEntry : System.Web.UI.Page { 私有标签 [] 子标签 = 新标签 [7]; 私有文本框 [] 子文本框 = 新文本框 [7]; protected void semDropDownList_SelectedIndexChanged(对象发送者,EventArgs e) { int sem = int.Parse(semDropDownList.SelectedItem.Text); 字符串部门 = DeptDropDownList.SelectedItem.Text; 如果(sem!= null) { SqlDataReader 主题 = Mlist.GetSubjects(d_id,sem); 诠释 i = 0; 而(主题。读取()) { 子标签[i] = 新标签(); 子文本框[i] = new TextBox(); 子标签[i].Text = sub; sublabels[i].ID = (subject["SUB_ID"]).ToString(); markz[i] = Convert.ToString(subject["SUB_ID"]); subtextbox[i].ID = "subtextbox"+i.ToString(); labelPlaceHolder.Controls.Add(sublabels[i]); labelPlaceHolder.Controls.Add(new LiteralControl("")); Textboxholder.Controls.Add(subtextbox[i]); Textboxholder.Controls.Add(new LiteralControl("")); 我++; } 主题.关闭(); } protected void SaveButton_Click(对象发送者,EventArgs e) { } }

【问题讨论】:

  • 您必须(重新)创建所有控件,这些控件最迟在 Page_Load 中的每次回发时动态创建,并且具有与以前相同的 ID。
  • 这是一个可以帮助您解决问题的示例:codeproject.com/Articles/3684/…

标签: c# asp.net


【解决方案1】:

您可以通过两种方式访问​​控件值

循环遍历占位符控件

IList<string> selectedValues= new List<string>();
foreach (Control control in placeHolderText.Controls)
{
    if (control is TextBox)
    {
        var textBox = control as TextBox;
        selectedValues.Add(textBox.Text);
    }
}

使用 request.form

var keys = Request.Form.AllKeys.Where(formKey => formKey.Contains("subtextbox"));
foreach (var formKey in keys)
{
    selectedValues.Add(Request.Form[formKey]);
}

更新

关于您在提交按钮单击时控件的可见性的问题,这是因为您在下拉列表 selectedindexchanged 事件中创建文本框的问题。在您的按钮单击事件中,占位符将为空,因为根本没有创建控件。 作为一种解决方法,您可以尝试以下方法。

创建如下函数

private void CreateDynamicControls()
{
    int sem = int.Parse(semDropDownList.SelectedItem.Text);
    string dept = DeptDropDownList.SelectedItem.Text;
    if (sem != null)
    {
        SqlDataReader subject = Mlist.GetSubjects(d_id, sem);
        int i = 0;
        while (subject.Read())
        {
            sublabels[i] = new Label();
            subtextbox[i] = new TextBox();
            sublabels[i].Text = sub;
            sublabels[i].ID = (subject["SUB_ID"]).ToString();
            markz[i] = Convert.ToString(subject["SUB_ID"]);
            subtextbox[i].ID = "subtextbox" + i.ToString();
            labelPlaceHolder.Controls.Add(sublabels[i]);
            labelPlaceHolder.Controls.Add(new LiteralControl(""));
            Textboxholder.Controls.Add(subtextbox[i]);
            Textboxholder.Controls.Add(new LiteralControl(""));
            i++;

        }

        subject.Close();

    }
}

在 PageLoad(在 !IsPostBack 块之外)和 semDropDownList_SelectedIndexChanged 事件中调用该函数。

【讨论】:

  • 当我点击提交按钮时,动态创建的文本框消失了
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 2012-07-25
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多