0

我有一个用 ASP.NET 编写的简单电子邮件表单,其中包含代码隐藏文件中的逻辑。这一切都在 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();

}

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

我在后面的代码中的其他 2 种方法:

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 并阅读了大量线程/文章,但似乎找不到解决方案......

感谢您的任何帮助。

4

3 回答 3

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

}
于 2011-10-12T16:20:36.237 回答
0

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

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

于 2011-10-12T16:27:02.040 回答
0

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

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

我的猜测是“Request.Form [...”项目可能是回发错误的项目。

HTH 戴夫

于 2011-10-12T16:32:45.547 回答