C# 什么是函数执行顺序?
请记住,我有VB背景,正在切换到C 在这段代码中,我只是使用函数将数据插入数据库,发送电子邮件确认,最后重置所有表单字段。但是,由于ResetForm函数清除SendEmail函数引用的电子邮件地址字段,会生成异常C# 什么是函数执行顺序?,c#,asp.net,function,C#,Asp.net,Function,请记住,我有VB背景,正在切换到C 在这段代码中,我只是使用函数将数据插入数据库,发送电子邮件确认,最后重置所有表单字段。但是,由于ResetForm函数清除SendEmail函数引用的电子邮件地址字段,会生成异常 SendEmail函数不应该在ResetForm启动之前完全执行吗?我是不是遗漏了什么?如果我对清除emailaddress文本框的行进行注释,该代码将起作用 来自跟踪的信息: 出现错误:参数“address”不能为空字符串。 参数名称:地址 protected void b
SendEmail函数不应该在ResetForm启动之前完全执行吗?我是不是遗漏了什么?如果我对清除emailaddress文本框的行进行注释,该代码将起作用 来自跟踪的信息: 出现错误:参数“address”不能为空字符串。 参数名称:地址
protected void btnSendRequest_Click(object sender, EventArgs e)
{
try
{
InsertRecords();
SendEmail();
//If both insert records and send email are successful, clear the form and session variables
ResetForm();
confirmation.Style["visibility"] = "visible";
}
catch (Exception ex)
{
Trace.Warn("There was an error: " + ex.Message);
}
}
protected void SendEmail()
{
DataTable tblStudents = (DataTable)Session["tblstudents"];
string strSenderEmailAddress = txtEmail.Text;
MailMessage emlMessage = new MailMessage();
emlMessage.From = new MailAddress(strSenderEmailAddress);
emlMessage.To.Add("someaddress@somewhere.com");
emlMessage.Subject = "Some subject";
string strMessageBody = "Some wonderful message";
string strStudentInfo=null;
foreach (DataRow row in tblStudents.Rows)
{
strStudentInfo = strStudentInfo
+ row["firstname"].ToString() + " " + row["middlename"].ToString() + " " + row["lastname"].ToString() + " DOB: " + row["dob"].ToString() + " " + row["school"].ToString()
+ Environment.NewLine + Environment.NewLine;
}
string strMessageFooter = Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine
+ "Some info about organization";
emlMessage.Body = strMessageBody + strStudentInfo + strMessageFooter;
SmtpClient myClient = new SmtpClient("smtphost");
myClient.Send(emlMessage);
}
错误信息:
Line 197:
Line 198: MailMessage emlMessage = new MailMessage();
Line 199: emlMessage.From = new MailAddress(strSenderEmailAddress);
Line 200: //emlMessage.To.Add("someone@else.me");
Line 201: emlMessage.To.Add("email@email.com");
Source File: c:\Users\igainey\Documents\Visual Studio 2012\Projects \parentportalsignup \parentportalsignup\default.aspx.cs Line: 199
Stack Trace:
[ArgumentException: The parameter 'address' cannot be an empty string.
Parameter name: address]
System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding) +1475149
System.Net.Mail.MailAddress..ctor(String address) +8
parentportalsignup._default.SendEmail() in c:\Users\igainey\Documents\Visual Studio 2012\Projects\parentportalsignup\parentportalsignup\default.aspx.cs:199
parentportalsignup._default.btnSendRequest_Click(Object sender, EventArgs e) in c:\Users\igainey\Documents\Visual Studio 2012\Projects\parentportalsignup\parentportalsignup\default.aspx.cs:240
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9752554
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +196
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
SendEmail函数不应该在ResetForm启动之前完全执行吗?是的,它应该-在调试器中运行它,并确保其他东西没有清除表单。您可以显示SendEmail的代码吗?正如您所描述的,应该有一些多线程活动。请记住,页面加载事件将首先执行,然后是btnSendRequest\u Click事件。确保其他内容没有清除页面加载中的字段,在这种情况下,请使用!Page.IsPostBack.让我们看看SendEmail。你确定你没有使用System.Net.Mail.SmtpClient.SendAsync…?@Smith.h.Neil这也是我的第一个想法