0

下面是我的简单页面的提交按钮单击的代码。我正在提交一个空表单,但没有显示服务器验证错误消息。我的代码有什么问题?当我点击提交时,页面只是变成空白,没有任何反应。我也无法附加调试器。

当我构建我的网站项目时,它也没有显示任何编译错误。我不知道我做错了什么。

 protected void btnSubmit_Click(object sender, EventArgs e)
        {
            // Need to Validate All Required Fields before redirecting to frmPersonalVerified.aspx
            bool blnFormIsValid = true;
            DateTime dtEndDate;
            DateTime dtStartDate;

            // Get Date because we have a value.
            dtEndDate = DateTime.Parse(txtEndDate.Text);

            // Get Date because we have a value.
            dtStartDate = DateTime.Parse(txtStartDate.Text);

            if (txtFirstName.Text.Trim() == "")
            {
                txtFirstName.BackColor = System.Drawing.Color.Yellow;
                lblError.Text = "Please enter first name.";
                blnFormIsValid = false;
            }
            else
            {
                lblError.Text = "";
                txtFirstName.BackColor = System.Drawing.Color.White;
                blnFormIsValid = true;
            }

            if (txtLastName.Text.Trim() == "")
            {
                txtLastName.BackColor = System.Drawing.Color.Yellow;
                lblError.Text = "Please enter last name.";
                blnFormIsValid = false;
            }
            else
            {
                lblError.Text = "";
                txtLastName.BackColor = System.Drawing.Color.White;
                blnFormIsValid = true;
            }
            if (txtPayRate.Text.Trim() == "")
            {
                txtPayRate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text = "Please enter pay rate.";
                blnFormIsValid = false;
            }
            else
            {
                lblError.Text = "";
                txtPayRate.BackColor = System.Drawing.Color.White;
                blnFormIsValid = true;
            }
            if (txtStartDate.Text.Trim() == "")
            {
                txtStartDate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text = "Please enter start date.";
                blnFormIsValid = false;
            }
            else
            {
                lblError.Text = "";
                txtStartDate.BackColor = System.Drawing.Color.White;
                blnFormIsValid = true;
            }
            if (txtEndDate.Text.Trim() == "")
            {
                txtEndDate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text = "Please enter end date.";
                blnFormIsValid = false;
            }
            else
            {
                lblError.Text = "";
                txtEndDate.BackColor = System.Drawing.Color.White;
                blnFormIsValid = true;
            }

            // Compare Dates
            if (DateTime.Compare(dtStartDate, dtEndDate) >= 0)
            {
                txtStartDate.BackColor = System.Drawing.Color.Yellow;
                txtEndDate.BackColor = System.Drawing.Color.Yellow;
                lblError.Text = "Please make sure that start date is less than end date.";
                blnFormIsValid = false;
            }

            else
            {
                lblError.Text = "";
                txtStartDate.BackColor = System.Drawing.Color.White;
                txtEndDate.BackColor = System.Drawing.Color.White;
                blnFormIsValid = true;
            }

            if (blnFormIsValid == true)
            {
                //Assign a value to the session variable. 
                Session["FirstName"] = txtFirstName.Text;
                Session["LastName"] = txtLastName.Text;
                Session["PayRate"] = txtPayRate.Text;
                Session["StartDate"] = txtStartDate.Text;
                Session["EndDate"] = txtEndDate.Text;

                // Sends A Request from the Browser to the server.
                Response.Redirect("frmPersonalVerified.aspx");
            }
        }

更新

我刚刚使用了 .Equals("")... 它不起作用。仍然显示空白页面

4

1 回答 1

1

忽略正确方法是使用 ASP.NET 的内置验证工具这一事实,问题在于您的程序逻辑已损坏。

blnFormIsValid用于存储表单的有效性,但是它的值没有意义,因为您在分配它时没有注意以前的状态。

如果我使用这些值提交您的页面表单...

txtFirstName = "" // this is invalid
txtLastName = "foo" // this is valid

...那么它将正确地使第一次验证失败并且blnFormIsValid将是错误的,但是您的下一次检查会忽略状态blnFormIsValid并将其设置为true仅仅是因为 txtLastName 的值是有效的。

这个问题不是源于我们对 ASP.NET 缺乏了解或知识,而是基本的编程和逻辑。对代码进行简单的逐步调试或试运行就可以揭示这一点。

以下是我的推荐清单:

使用 ASP.NET 验证控件,如下所示:

<input type="text" id="firstName" runat="server" />
<asp:RequiredValidator runat="server" controlToValidate="firstName" />

void Page_Load() {
    if( Page.IsPostBack) {
        Page.Validate();
        if( Page.IsValid ) {
            // that's all you have to do
        }
    }

不要使用匈牙利符号

这是当您在标识符前加上一个标识其类型的标签,例如“blnFormIsValid”或“txtFirstName”。只需使用“formIsValid”或“firstName”。匈牙利符号仅在编辑器不提供输入信息的环境中使用。

不要使用foo == true

...因为该操作将评估为与 相同的值foo。在您的情况下,您应该使用if( formIsValid )而不是if( formIsValid == true ). 避免不必要地使用==运算符有助于避免意外使用=赋值运算符而不是==相等运算符的情况(并使您的代码更具可读性)。

于 2012-09-23T06:16:48.063 回答