我正在根据下拉列表中选择的值动态创建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。我该怎么办呢?
答案 0 :(得分:0)
如果您以完全相同的方式创建控件集合,则在回发期间能够检索值的唯一方法是。因此,如果您在事件期间添加控件,则在回发时,您需要在同一父控件中创建完全相同的控件(具有相同的ID)。
不幸的是 - 当你在回发事件中添加控件时,这很难做到。我过去所做的是使用ViewState来跟踪在回发期间应该创建哪些控件。可能有更好的方法来做到这一点,但是做ViewState路线似乎有效。
答案 1 :(得分:0)
您始终可以直接从Request.Form集合中读取已发布的值。