C# 什么是函数执行顺序?

C# 什么是函数执行顺序?,c#,asp.net,function,C#,Asp.net,Function,请记住,我有VB背景,正在切换到C 在这段代码中,我只是使用函数将数据插入数据库,发送电子邮件确认,最后重置所有表单字段。但是,由于ResetForm函数清除SendEmail函数引用的电子邮件地址字段,会生成异常 SendEmail函数不应该在ResetForm启动之前完全执行吗?我是不是遗漏了什么?如果我对清除emailaddress文本框的行进行注释,该代码将起作用 来自跟踪的信息: 出现错误:参数“address”不能为空字符串。 参数名称:地址 protected void b

请记住,我有VB背景,正在切换到C

在这段代码中,我只是使用函数将数据插入数据库,发送电子邮件确认,最后重置所有表单字段。但是,由于ResetForm函数清除SendEmail函数引用的电子邮件地址字段,会生成异常


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这也是我的第一个想法