在ASP.NET表单提交时,它会抛出一个未设置为对象实例的Object引用。

时间:2011-10-12 16:18:19

标签: c# asp.net object-reference

我有一个用ASP.NET编写的简单电子邮件表单,其中包含codebehind文件中的逻辑。一切都在C#中(逻辑是......)。无论如何,在页面加载时我有以下内容:

protected void Page_Load(object sender, EventArgs e)
{
    RequestorName.Text = Request.Form["UserName"].ToString();
    RequestorTitle.Text = Request.Form["JobTitle"].ToString();
    RequestorEmail.Text = Request.Form["Email"].ToString();
    RequestorPhone.Text = Request.Form["Phone"].ToString();
    RequestorAddress1.Text = Request.Form["Address"].ToString();
    RequestorAddress2.Text = Request.Form["City"].ToString() + " " + Request.Form["State"].ToString() + ", " + Request.Form["Zip"].ToString();

}

这很有效,因为它将用户信息提取到几个字段中,因此他们不必手动填写所有内容。

我背后的代码中的其他两种方法:

protected void SubmitForm_Click(object sender, EventArgs e)
{
    SendEmail();
}

protected void SendEmail()
{
    try
    {
        //compose email and send

    }
    catch (Exception ex)
    {
        ErrorMessage.Text = "Error: " + ex.ToString();

    }
}

在我的表单页面上,按钮代码为:

<center>
                <asp:Button runat="server" Text="Submit" ID="Submit" OnClick="SubmitForm_Click" class="button red" />
</center>

当我单击生成电子邮件并发送电子邮件的表单上的“发送”按钮时,会发生错误。我可以删除Page_Load代码并且工作得很好,但我希望将其保留在那里,这样用户就不必填写太多信息。

我已经使用了我的Google Fu并阅读了大量的帖子/文章,但似乎无法找到解决方案......

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

添加对IsPostBack的检查:

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack) 
  {
    RequestorName.Text = Request.Form["UserName"].ToString();
    RequestorTitle.Text = Request.Form["JobTitle"].ToString();
    RequestorEmail.Text = Request.Form["Email"].ToString();
    RequestorPhone.Text = Request.Form["Phone"].ToString();
    RequestorAddress1.Text = Request.Form["Address"].ToString();
    RequestorAddress2.Text = Request.Form["City"].ToString() + " " +    Request.Form["State"].ToString() + ", " + Request.Form["Zip"].ToString();
  }

}

答案 1 :(得分:0)

您是否尝试将if (Page.IsPostBack == false)添加到Page_Load事件?

我假设Request.Form代码来自用户填写的字段,但没有看到其余的标记,我不确定为什么你必须从表单中重新分配值到表格上的其他字段。

答案 2 :(得分:0)

错误发生在哪里? 从您的代码中,我假设您从另一个页面发布到您的电子邮件表单并传递参数。

如果是这种情况,那么假设您的.Text是页面控件,那么您应该查看在If(!IsPostback){...}中包含控件填充程序,仅用于第一次加载页面。然后,您的电子邮件代码可以从本地控件中读取。

我的猜测是&#34; Request.Form [...&#34;项目可能是在回发时踢回错误的。

HTH 戴夫