0

コードは次のとおりです。

            if (roomGender == "M")
            {
                if (gender == "F")
                {
                    row.Cells[5].BackColor = Color.FromName("#FF0000");
                    args.IsValid = false;
                    vldGender.ErrorMessage = building +" " + room + ": You cannot place a female in this space";
                }
                else
                {
                    vldGender.ErrorMessage = "";
                }
            }
            //end male gender check
            //Female gender check
            if (roomGender == "F")
            {
                if (gender == "M")
                {
                    row.Cells[5].BackColor = Color.FromName("#FF0000");
                    args.IsValid = false;
                    vldGender.ErrorMessage = building +" " + room + ": You cannot place a male in this space";
                }
                else
                {
                    vldGender.ErrorMessage = "";
                }
            }
            //end female gender check
            //Validate Names
            string last = ((TextBox)row.FindControl("txtLast")).Text;
            string first = ((TextBox)row.FindControl("txtFirst")).Text;

            if (last == "" && first != "")
            {
                row.Cells[3].BackColor = Color.FromName("#FF0000");
                args.IsValid = false;
                vldLast.ErrorMessage = building +" " + room + ": The last name cannot be blank";
            }
            else
            {
                vldLast.ErrorMessage = "";
            }
            if (last != "" && first == "")
            {
                row.Cells[4].BackColor = Color.FromName("#FF0000");
                args.IsValid = false;
                vldFirst.ErrorMessage = building +" " + room + ": The first name cannot be blank";
            }
            else
            {
                vldFirst.ErrorMessage = "";
            }

            if (last != "" && first != "" && gender == "")
            {
                row.Cells[5].BackColor = Color.FromName("#FF0000");
                args.IsValid = false;
                vldGender2.ErrorMessage = building +" " + room + ": A gender must be selected";
            }
            else
            {
                vldGender2.ErrorMessage = "";
            }
            if (!(regLast.IsValid))
            {
                row.Cells[3].BackColor = Color.FromName("#FF0000");
                regLast.ErrorMessage = building +" " + room + ": The last name is incorrect, please check the name";
            }
            if (!(regFirst.IsValid))
            {
                row.Cells[4].BackColor = Color.FromName("#FF0000");
                regFirst.ErrorMessage = building +" " + room + ": The first name is incorrect, please check the name";
            }
        }
    }
}

私の問題 これは、ifステートメントの1つが検証に失敗したときにifステートメントを使用しているため、ifステートメントがその行で停止します。そのため、その行の残りのフィールドは検証されません。

フィールドの名、名前、性別があります。

性別ではなく、名と名前を追加するのを忘れた場合。

この検証では、名が欠落していることだけが表示されます。名が修正されるまで、名はチェックされません。

両方のフィールドが同時にチェックされるように、この問題を解決する方法はありますか?

4

2 に答える 2

3

これは、コードが1つの関数に対して複雑になりすぎている典型的なケースです。

各フィールドを独立したステップとして検証すると、読みやすく、保守しやすくなります。

void ValidateRoomGender() 
{
     if(string.IsNullOrEmpty(roomGender))
     {
         vldRoomGender = "Please enter a room gender";
     }
     else if ((roomGender != 'M') && (roomGender != 'F'))
     {
         vldRoomGender = "Invalid Value";
     }
     else
     {
         vldRoomGender = string.Empty;
     }
}

void ValidateGender() 
{
     if( ((vldGender == 'F') && (vldRoomGender == 'M')) || ((vldGender == 'M') && (vldRoomGender == 'F'))
     {
          vldGender = "The gender must match the room"
     }
     else if (string.IsNullOrEmpty(vldGender))
     {
        // etc
     }
}


void Validate()
{
      ValidateRoomGender();
      ValidateGender();
      ValidateFirstName();
      ValidateSurname();
}
于 2012-05-01T23:16:00.657 に答える
0

検証が失敗した場所がどこに戻ってくるかはわかりませんが、コードを再編成して、より効率的で保守しやすくしました。vldGenderとvldGender2には理由がありますか?regFirstとregLastは何をしますか?

さらに、文字列値を比較するときは、==と!=の使用を避ける必要があります。""またはnullをチェックするときは、string.Equalsまたはstring.IsNullOrEmptyを使用する必要があります。エラーメッセージの一部にはString.Formatもお勧めします。

if (roomGender.Equals("M"))
{
    if (gender.Equals("F"))
    {
        row.Cells[5].BackColor = Color.FromName("#FF0000");
        args.IsValid = false;
        vldGender.ErrorMessage = building + " " + room + ": You cannot place a female in this space";
    }
    else
    {
        vldGender.ErrorMessage = "";
        vldGender2.ErrorMessage = "";
    }

}
//end male gender check
//Female gender check
else if (roomGender.Equals("F"))
{
    if (gender.Equals("M"))
    {
        row.Cells[5].BackColor = Color.FromName("#FF0000");
        args.IsValid = false;
        vldGender.ErrorMessage = building + " " + room + ": You cannot place a male in this space";
    }
    else
    {
        vldGender.ErrorMessage = "";
        vldGender2.ErrorMessage = "";
    }
}
//end female gender check
// No gender selected
else
{
    row.Cells[5].BackColor = Color.FromName("#FF0000");
    args.IsValid = false;
    vldGender2.ErrorMessage = building + " " + room + ": A gender must be selected";
}

//Validate Names
string last = ((TextBox)row.FindControl("txtLast")).Text;
string first = ((TextBox)row.FindControl("txtFirst")).Text;

if (string.IsNullOrEmpty(last))
{
    row.Cells[3].BackColor = Color.FromName("#FF0000");
    args.IsValid = false;
    vldLast.ErrorMessage = building + " " + room + ": The last name cannot be blank";
}
else            
    vldLast.ErrorMessage = "";

if (string.IsNullOrEmpty(first))
{
    row.Cells[4].BackColor = Color.FromName("#FF0000");
    args.IsValid = false;
    vldFirst.ErrorMessage = building + " " + room + ": The first name cannot be blank";
}
else
    vldFirst.ErrorMessage = "";

if (!(regLast.IsValid))
{
    row.Cells[3].BackColor = Color.FromName("#FF0000");
    regLast.ErrorMessage = building + " " + room + ": The last name is incorrect, please check the name";
}

if (!(regFirst.IsValid))
{
    row.Cells[4].BackColor = Color.FromName("#FF0000");
    regFirst.ErrorMessage = building + " " + room + ": The first name is incorrect, please check the name";
}
于 2012-05-01T23:04:13.237 に答える