0

以下は、私の単純なページの送信ボタンのクリックのコードです。空のフォームを送信していますが、サーバー検証エラー メッセージが表示されません。コードの何が問題になっていますか? 送信をクリックすると、ページが空白になり、何も起こりません。デバッガーも接続できません。

Web サイト プロジェクトをビルドしているときに、コンパイル エラーも表示されません。何が間違っているのかわかりません。

 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

...その後、最初の検証に正しく失敗し、blnFormIsValidfalseになりますが、次のチェックではの状態が無視され、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 )ます。演算子の不必要な使用を避けることは、等式演算子の代わりに代入演算子==を誤って使用するケースを回避するのに役立ちます(そしてコードをより読みやすくします)。===

于 2012-09-23T06:16:48.063 に答える