Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 正在回发文本框。是否加载页面中的文本?_Asp.net_Postback_Pageload - Fatal编程技术网

Asp.net 正在回发文本框。是否加载页面中的文本?

Asp.net 正在回发文本框。是否加载页面中的文本?,asp.net,postback,pageload,Asp.net,Postback,Pageload,我的asp.net页面上有一个asp:TextBox和一个submit按钮。单击按钮后,TextBos的值将被发回。我将把返回的文本值保留到会话中,以便其他子控件可以在其页面加载期间访问该值。但是,我在Page_Load方法中始终没有得到任何(“”),我可以在按钮单击处理程序中读取文本。我知道“按钮点击事件”发生在页面加载之后。所以,我在问如何在页面加载期间“预取”TextBox.text public partial class form_staffinfo : System.Web.UI.U

我的asp.net页面上有一个asp:TextBox和一个submit按钮。单击按钮后,TextBos的值将被发回。我将把返回的文本值保留到会话中,以便其他子控件可以在其页面加载期间访问该值。但是,我在Page_Load方法中始终没有得到任何(“”),我可以在按钮单击处理程序中读取文本。我知道“按钮点击事件”发生在页面加载之后。所以,我在问如何在页面加载期间“预取”TextBox.text

public partial class form_staffinfo : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e){
        string s = staff_id.Text; //Reach this line first, but GET empty value. However, I want to keep it in the session during this moment.
    }

    protected void btn_submit_Click(object sender, EventArgs e) {
        string s = staff_id.Text; //Reach this line afterward, value got.
    }
}
--编辑--


由于我无法在页面加载中获取文本框的文本,因此,我没有包含任何与会话相关的代码以清晰地显示

谢谢大家!!
William

还有其他设置文本框值的方法。请检查您是否正在覆盖加载页面和修改textbox文本属性之前发生的其他事件。甚至,在更新会话变量的地方发布代码也很方便。根据您发布的代码,它应该可以工作。

您是否禁用了autoeventwireup?我可能弄错了,但我认为如果它被禁用,您的页面加载将不会启动。如果要使其处于禁用状态,则始终可以覆盖OnLoad事件

protected override void OnLoad(EventArgs e)
{
  base.OnLoad(e);
  // do stuff
}

服务器控件的任何值都不能在页面加载中使用。这些控件是在表单验证之后(即加载表单之后)和表单控件事件触发之前(如示例中的按钮单击)分配的。发布的值位于
Request.Form
集合中。查看
AllKeys
属性,如果您使用发布的示例,您应该会看到一个以
$staff\u id
结尾的键。根据控件是否嵌套在母版页或其他控件中,键的from中可能有其他字符

如果您在页面加载时必须拥有该值,请从
Request.Form
集合而不是用户控件中获取该值,但我怀疑在页面生命周期的早期获取该值是否明智。如果需要在会话中保留该值,您可以捕获textbox的ContextChanged事件

编辑-附加说明 如果要为用户控件创建自定义事件,只需几个步骤

创建一个委托。这将是控件间消息传递的公共对象

public delegate void StaffIdChangedEvent(object sender, string staffId);
在要广播的用户控件中使用该委托声明事件

public event StaffIdChangedEvent StaffIdChanged;
在用户控件中,当您准备广播时(比如从Staff_id textbox的OnTextChanged事件),您只需调用事件[通常最好检查事件是否为空]

this.StaffIdChangedEvent(this, "staff-id-value-here");
最后一步是将用户控件事件连接到事件处理程序(这可以防止在尝试调用事件时出现我上面提到的null情况)。您可以将处理程序连接到宿主页面

this.form_staffinfo.StaffIdChangedEvent += this.some_method_on_page;
只需确保页面上的方法与用于声明事件的委托具有相同的方法签名

事件还可以连接到需要了解它们的每个控件(查找多播委托),因此您可以执行以下操作:

this.form_staffinfo.StaffIdChangedEvent += this.some_method_on_page;
this.form_staffinfo.StaffIdChangedEvent += this.some_control_on_the_page;
this.form_staffinfo.StaffIdChangedEvent += this.some_other_control_on_the_page;
无论如何,我通常更喜欢在页面的OnInit方法中进行这种类型的连接

override protected void OnInit(EventArgs e)
    {
        base.OnInit(e);
        InitializeComponent();
    }

只需编写您自己的InitializeComponent方法来集中您必须执行的任何接线。

我同意-问题出在其他地方。你应该可以在第2页上找到文本,谢谢。由于页面上还有其他用户控件,因此将根据文本框(staff_id)加载相应的内容。您能否建议获得价值的最佳时机和方式,以便其他页面可以访问该价值?我可能会参加一个活动。具有文本框的用户控件可能有一个事件(
StaffIdChanged
),其他需要了解该事件的用户控件可以订阅该事件。我会更新我的答案以更充分地解释。好主意!一个问题是,我的用户控件是由代码动态加载的,这个想法仍然可行吗?对于动态加载的控件来说,这个原则仍然是合理的。Jonathan,帮帮忙。您的方法更准确,更具体系结构,而我一直在考虑后期数据处理。非常感谢你。
override protected void OnInit(EventArgs e)
    {
        base.OnInit(e);
        InitializeComponent();
    }