我有一个用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并阅读了大量的帖子/文章,但似乎无法找到解决方案......
感谢您的帮助。
答案 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 戴夫