文本框和标签数组如何在 C# 中的提交方法中获取值

Posted

技术标签:

【中文标题】文本框和标签数组如何在 C# 中的提交方法中获取值【英文标题】:Array of textbox and labels how to get value in submit method in 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/… 【参考方案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 事件中调用该函数。

【讨论】:

当我点击提交按钮时,动态创建的文本框消失了

以上是关于文本框和标签数组如何在 C# 中的提交方法中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何在MVC C#中将文本框和下拉值从视图传递到控制器

c# 将从单个文本框中获取的多个值分配给标签

获取IOS模拟器文本字段中的值

Jquery学习笔记:操作form表单元素之一(文本框和下拉框)

带有文本框和 JS 的提交按钮

在iphone中单击按钮时如何将文本字段/标签中的值添加到数组中