在事件期间访问动态添加到占位符的控件

时间:2011-03-30 13:02:38

标签: c# asp.net

我正在根据下拉列表中选择的值动态创建ASP.NET控件;例如,字段可以是文本框或复选框(现在),然后将其添加到占位符控件。但是,我不确定如何检索值 - 使用占位符的FindControl方法返回null,尽管我在创建控件时指定了ID。

这是我的代码:

protected void ddlFields_SelectedIndexChanged(object sender, EventArgs e) {
    // this simply gives me back an object with some properties 
    // such as the type of field (e.g. text, boolean, number)
    var column = GetFieldDetailsByValue(ddlFields.SelectedValue);
    this.CreateInputControl(column.Type);  
}

private void CreateInputControl(string dataType) { 
    Control controlToAdd = null;

    switch (dataType) {
        case TYPE_STRING:
        case TYPE_NUMBER:
            controlToAdd = new TextBox();
            break;
        case TYPE_BOOL:
            controlToAdd = new CheckBox();
            break;      
    }

    if (controlToAdd != null) { 
        controlToAdd.ID = "ctlFieldValue";
        this.fieldsPlaceholder.Controls.Add(controlToAdd);
    }
}

我有一个Button事件,它检查ctlFieldValue控件以检索它的值,但它始终为null。我该怎么办呢?

2 个答案:

答案 0 :(得分:0)

如果您以完全相同的方式创建控件集合,则在回发期间能够检索值的唯一方法是。因此,如果您在事件期间添加控件,则在回发时,您需要在同一父控件中创建完全相同的控件(具有相同的ID)。

不幸的是 - 当你在回发事件中添加控件时,这很难做到。我过去所做的是使用ViewState来跟踪在回发期间应该创建哪些控件。可能有更好的方法来做到这一点,但是做ViewState路线似乎有效。

答案 1 :(得分:0)

您始终可以直接从Request.Form集合中读取已发布的值。