【问题标题】:How to handle a transfer data from a postback to preinit event?如何处理从 postback 到 preinit 事件的传输数据?
【发布时间】:2013-04-18 22:00:49
【问题描述】:

想象一个场景,其中我有两种形式,第一种是静态的,第二种是动态的。 这些表格用于学生预注册过程。

Form1 检查是否存在具有 ID(国民身份)的学生。如果“存在”,它将显示注册过程(例如,待处理、已接受等)。如果“不存在”,则表示第二个表格应该可见以供学生填写。第二种形式是完全动态的。所有字段等都是在 PreInit 中动态创建的。

除了 StudentID,我还必须传递一个 FormID。 FormID 很重要,因为还有其他的表单,动态表单也会基于它生成。

我的问题是如何将StudentID (txtStudentID.Text) 转移到动态表单中。 我尝试了很多场景,但它们都不能正常工作,比如 ajax 面板、page1 和 page2 等。

如果您能给我一个实用的解决方案,我将不胜感激。

表格一:

//Request.QueryString["FormID"];
<asp:TextBox ID="txtStudentID" runat="server"></asp:TextBox><br />
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />

表格2:

protected override void OnPreInit(EventArgs e)
{
        base.OnPreInit(e);
        CreateDynamicForm(StudentID);
    }
}
protected void CreateDynamicForm(Guid StudentID)
{
    //  codes for generating the dynamic form, based on the StudentID submited form Form1, and FormID
}

【问题讨论】:

    标签: c# asp.net dynamic postback onpreinit


    【解决方案1】:

    Init-fase 用于初始化您的页面。 PreInit-fase 在 Init-fase 之前,在 PreInit 期间很多东西都没有被初始化,比如你的 MasterPage 和你的 Context。我的建议:很少使用 PreInit。

    在任何一种情况下,您都应该能够使用 HttpContext.Current.Request.Form。

    此请求部分包含从客户端发送到服务器的所有数据。其中有一个名为“Form”的集合,其中包含用户输入的来自网络表单的所有数据。

    此数据用于填充页面上的所有控件,但填充这些控件发生在页面初始化之后,即在 OnInit 之后。

    在页面生命周期的这一点上,您只能通过此表单集合访问表单值,例如:

    string studentID = HttpContxt.Current.Request.Form["txtStudentID"];

    有一个陷阱。一些页面元素,如 MasterPage,可以修改其中的 ID。它们在内部控件的 ID 之前有自己的 ID。所以 ID“txtStudentID”可能变成:“ctl00$contents$txtStudentID”。 (这意味着有一个 ID 为“ctl00”的外部控件,其中有一个名称为“contents”的控件,其中有一个控件“txtStudentID”。

    【讨论】:

    • 嗨,感谢您的回答。我按照你提到的做了,但它为空:protected override void OnInit(EventArgs e) { if (IsPostBack) { string x = HttpContext.Current.Request.Form["txtSID"]; base.OnInit(e);添加按钮(); } }
    • 它测试了我自己的答案。在 OnInit 和 OnPreInit 中,HttpContext.Current 已经可用(在我的测试用例中)。我用 V2008 / .NET3.5 和 VS2012 / .NET4.5 进行了测试。尝试在您的代码中测试 HttpContext.Current 是否为 NULL、HttpContext.Current.Request 是否为 NULL、HttpContext.Current.Request.Forms 是否为 NULL。如果其中之一为空,您将获得 NullReferenceException。在这种情况下,我们应该找出您的上下文未正确初始化的原因。
    • 我对使用 HttpContext.Current.Request.Form 感到困惑。事实上,这是我第一次使用它。使用循环我得到了值,但不知道如何直接获取: for (int i = 0; i ", HttpContext.Current.Request.Form.GetKey(i), HttpContext.Current.Request.Form.GetValues(i).GetValue(0).ToString());部分结果:ctl00$contents$txtSID:2343333434
    • 我想知道为什么但我使用 HttpContext.Current.Request.Form["ctl00$contents$txtSID"].ToString() 获得了 txtSID 的值,如果 ClientIDMode 设置为 static
    • Danke Schoen Martin :) 你帮了我大忙,简化了我的表格。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多