为什么服务器验证在我的代码中不起作用?

问题描述 投票:0回答:1

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

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

 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(“”)...,它不起作用。仍显示空白页

c# asp.net form-submit
1个回答
1
投票

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

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

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

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

...然后,它将正确地使第一次验证失败,并且blnFormIsValid将为false,但是仅由于txtLastName的值有效,您的下一个检查将忽略blnFormIsValid的状态并将其设置为true

此问题不是由于我们缺乏对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 )。避免不必要地使用==运算符可以帮助避免意外使用=赋值运算符而不是==相等运算符的情况(并使代码更具可读性)。

© www.soinside.com 2019 - 2024. All rights reserved.