繁体   English   中英

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

[英]Accessing a control dynamically added to a placeholder during an event

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

这是我的代码:

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。 我应该如何处理呢?

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

不幸的是-在回发事件期间添加控件时,这很难做到。 我过去所做的就是使用ViewState跟踪回发期间应创建哪些控件。 虽然可能有更好的方法,但是执行ViewState路由似乎可行。

您总是可以直接从Request.Form集合中读取过帐的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM