【问题标题】:Get value of control after postback回发后获取控制值
【发布时间】:2013-03-03 16:03:14
【问题描述】:

我在页面中有一个动态控件。它是由代码隐藏添加到此页面的。

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);

}

谁有办法解决这个问题?

【问题讨论】:

  • 你在哪里添加这些控件?
  • 我是通过codebehind添加的。在子页面中添加。
  • 您是否在 Page_Load 中创建它们?您是否在使用 PostBack 提交表单时创建它们?具体何时何地?
  • 您可以访问我的机器吗?我会更详细地展示它。可以吗?使用teamviewer?
  • 很抱歉,我的机器上既没有安装 tiemviewer,也没有时间。您应该聘请顾问。

标签: c# asp.net user-controls code-behind


【解决方案1】:

我相信,您需要在回发时重新创建动态创建的控件。

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();
      }
}

【讨论】:

  • 你好兄弟,谢谢你的回复。我明白你的想法了。我相信如果我们失去控制它会正常工作。但在我的情况下,它仍然显示控制,但我无法获得价值从这个控件。所以,我的问题是无法从 FileUpload 中获取价值
  • 你如何尝试获得价值?给我看看你的代码。你做错了很多事情,包括在后面的代码中创建控件。您可以将它们作为不可见的标记放在标记中,并在单击按钮时使其可见。阅读一些关于最佳实践的书籍/文章/博客。
【解决方案2】:

我怀疑您添加了控件的列表是一个内容容器,因此您必须首先获取对它的引用,然后调用FindControl("btnFu") 方法。

// var list = yourListControl
Button btnFu = list.FindControl("btnFu") as Button;
if(btnFu != null)
{
    // Operate on the button
}

【讨论】:

    【解决方案3】:

    我会尝试使用 Page.FindControl("fu") 搜索控件。此问题的答案中有一些有趣的选项,涵盖了使用母版页和用户控件时查找控件等问题。

    ASP.Net FindControl is not working - How come?

    【讨论】:

    • 哦,是的,就是这样。我使用了母版页和 ContentPlaceHolder,兄弟。
    • 我试过了,但没用。兄弟,我们可以谈谈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多