获取回发后的控制值
本文关键字:控制 获取 | 更新日期: 2023-09-27 18:03:55
我在页面中有一个动态控件。它是由后台代码添加到本页的。
FileUpload fu = new FileUpload();
fu.ID = "fu";
fu.EnableViewState = true;
list.Add(fu);
Button btnFu = new Button();
btnFu.Text = "Upload";
btnFu.ID = "btnFu";
list.Add(btnFu);
使用postBack后,我无法从这个fileUpload中获取值。
if (!IsPostBack) {
}
else {
string str_btn = null;
if (Request.Form.Keys[Request.Form.Keys.Count - 1] != null)
str_btn = Request.Form.Keys[Request.Form.Keys.Count - 1].ToString();
if (!string.IsNullOrEmpty(str_btn))
handleClick(str_btn);
}
谁有解决这个问题的办法?
我会尝试使用Page.FindControl("fu")搜索控件。在这个问题的答案中有一些有趣的选项,包括在使用母版页和用户控件时寻找控件等问题。
ASP。Net FindControl不工作-怎么回事?
我怀疑您添加控件的列表是一个内容容器,所以您必须首先获得对它的引用,然后调用FindControl("btnFu")
方法。
// var list = yourListControl
Button btnFu = list.FindControl("btnFu") as Button;
if(btnFu != null)
{
// Operate on the button
}
我认为您需要在post back上重新创建动态创建的控件。
public class YourPage : System.Web.UI.Page
{
protected bool AreControlsCreated {
{
get{return (bool)ViewState["AreControlsCreated"];}
set{ViewState["AreControlsCreated"] = value;}
}
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
AreControlsCreated = false;
}
else if(AreControlsCreated)
{
CreateYourControls();
}
}
private void CreateYourControls()
{
...
FileUpload fu = new FileUpload();
fu.ID = "fu";
fu.EnableViewState = true;
list.Add(fu);
Button btnFu = new Button();
btnFu.Text = "Upload";
btnFu.ID = "btnFu";
list.Add(btnFu);
AreControlsCreated = true;
}
protected void YourButton_Click(object sender, EventArgs e)
{
createYourControls();
}
}