无法在C#中获得正确的Bool结果

时间:2016-08-30 17:50:21

标签: c# validation boolean-expression

我有一个表单,我想在处理表单之前检查验证。我的表单有2个部分,所以我想确保每个部分中的至少一个项目在按下提交按钮时被选中,如果他们这样做则转到Dashboard.aspx。即使我在检查result1和result2时输入了所有必需的信息,我也会得到错误。 Result1和Result2无法获得正确的值。即使值再次为True,也会传递错误。

这是我的代码:

    protected void btnSumbit_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid)
            return;

        bool result1 = false;
        bool result2 = false;
        CheckWireFromValidation(result1);
        CheckWireToValidation(result2);
        if (result1 == true && result2 == true)
        {
            Response.Redirect("~/DashBoard.aspx");
        }
    }

    public bool CheckWireFromValidation (bool result1)
    {
        if (drpFromCoporate.SelectedIndex != 0 || drpFromCapital.SelectedIndex != 0 || drpFromProperty.SelectedIndex != 0)
        {
            result1 = true;
        }
        else
        {
            result1 = false;
            ShowAlertMessage("You need to choose at least one filed from Wire From drop downs!!");
        }         
        return result1;
    }


    public bool CheckWireToValidation(bool result2)
    {
        if (drpToCapital.SelectedIndex != 0 || drpToCoporate.SelectedIndex != 0 || drpToProperty.SelectedIndex != 0 || drpToTemplate.SelectedIndex != 0 || txtCorpAmt.Text != "" || txtCapAmt.Text != "" || txtPropAmt.Text != "" || txtTempelateAmt.Text != "")
        {
            result2 = true;
        }
        else
        {
            ShowAlertMessage("You need to choose at least one filed from Wire To drop downs!!");
        }
        return result2;      
    }

2 个答案:

答案 0 :(得分:3)

您没有使用CheckWireToValidation的结果。您使用的是最初分配的false值。

试试这个

    bool result1 = false;
    bool result2 = false;

    if (CheckWireFromValidation(result1) && CheckWireToValidation(result2))
    {
        Response.Redirect("~/DashBoard.aspx");
    }

修改

您期望的行为是out parameter modifier的行为。但请不要那样写代码......

我编辑了你的代码以摆脱.. em .. cruft。这应该更具可读性。

protected void btnSumbit_Click(object sender, EventArgs e)
{
    if (!Page.IsValid)
        return;

    if (CheckWireFromValidation() && CheckWireToValidation())
    {
        Response.Redirect("~/DashBoard.aspx");
    }
}

public bool CheckWireFromValidation ()
{
    if (drpFromCoporate.SelectedIndex != 0 || drpFromCapital.SelectedIndex != 0 || drpFromProperty.SelectedIndex != 0)
    {
        return true;
    }
    else
    {          
        ShowAlertMessage("You need to choose at least one filed from Wire From drop downs!!");
        return false;
    }         
}

public bool CheckWireToValidation ()
{
    if (drpToCapital.SelectedIndex != 0 || drpToCoporate.SelectedIndex != 0 || drpToProperty.SelectedIndex != 0 || drpToTemplate.SelectedIndex != 0 || txtCorpAmt.Text != "" || txtCapAmt.Text != "" || txtPropAmt.Text != "" || txtTempelateAmt.Text != "")
    {
        return true;
    }
    else
    {
        ShowAlertMessage("You need to choose at least one filed from Wire To drop downs!!");
        return false;
    }     
}

答案 1 :(得分:2)

由于您将Result1Result2作为参数传递而不是分配。结果永远不会被设定。

这是一种正确的方法

bool result1 = CheckWireFromValidation(result1);
bool result2 = CheckWireToValidation(result2);

if (result1 == true && result2 == true)
{
    Response.Redirect("~/DashBoard.aspx");
}

也是旁注。我想我们可以安全地从CheckWireFromValidation方法中删除布尔参数。由于返回值不取决于输入变量。

希望这有帮助。