从其他方法C#或VB.net使用IF ELSE条件

时间:2019-07-11 15:15:21

标签: vb.net

我知道这个问题对于某些人来说可能非常容易,所以请不要为询问而烦恼,但是我一直在努力找出答案:

我想通过其他方法使用IF Else语句中的条件,根据用户通过还是失败将用户重定向到不同的页面。这就是我的代码:

    Public passScore As Boolean

    Public Sub BindGrid()
    .....
        If calcTotal >= 70 Then
            passScore = True
            btnNext.Visible = True
        Else
            passScore = False
            btnNext.Visible = False
        End If


    End Sub

这是我在努力的地方..在单击按钮后,能够使用计算结果来重定向用户:

Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnNext.Click


        If passScore = True Then
            Response.Redirect(mstrPassSlide, False)
        else
            Response.Redirect(mstrFailSlide, False)
        End If

    Catch ex As Exception
        Throw ex
    Finally

End Sub

新代码更改

我尝试了以下建议,现在用于计算的数据库对象返回NULL。我将方法从“ Sub”更改为“ Function”

Public Function CalculateTotal() As Integer
    Dim objDatabase As BTTQAResults

    Try
        objDatabase = CType(Cache("QAResults"), BTTQAResults)
        Dim calcTotal As Integer
        For index As Integer = 0 To objDatabase.Count - 1
            calcTotal = calcTotal + objDatabase(index).Mark
        Next
        calcTotal = CInt((calcTotal / objDatabase.Count) * 100)

        Part1QAResult.DataSource = objDatabase
        Part1QAResult.DataBind()

    Catch ex As Exception
        ExceptionManager.Publish(ex)
        Response.Redirect("~/Error.aspx", False)
    End Try
End Function

objDatabase = CType(Cache(“ QAResults”),BTTQAResults)为NULL

3 个答案:

答案 0 :(得分:2)

当您发现自己想在另一种方法中使用一种方法的一部分逻辑时,通常表明该逻辑应重构为自己的方法,以便可以在多个地方调用它。

在这种情况下,我们可以使用两个只读属性,例如:

Public ReadOnly Property CalcTotal() As Integer
    Get
        'Do some calculation here
        Return result
    End Get
End Property

Public ReadOnly Property PassScore() As Boolean
    Get
        Return CalcTotal >= 70
    End Get
End Property

现在可以从类中的任何方法调用这些属性中的任何一个。

答案 1 :(得分:0)

您应该尝试在单击事件时调用BindGrid()方法。

Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnNext.Click

    BindGrid()
    If passScore = True Then
        Response.Redirect(mstrPassSlide, False)
    End If


    'Response.Redirect(mstrFailSlide, False)

    Catch ex As Exception
        Throw ex
    Finally
End Sub

答案 2 :(得分:0)

您可能需要将逻辑分成较小的方法,以使代码可重用。或将其放在类中。

   Public Function CalculateTotal() As Integer
      ' ...
   End Function

   Public Function IsTotalPassScore() As Boolean
      Return CalculateTotal() >= 70
   End Function

   Public Sub BindGrid()
        If IsTotalPassScore() Then
            btnNext.Visible = True
        Else
            btnNext.Visible = False
        End If
    End Sub

    Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnNext.Click
        If IsTotalPassScore() Then
            Response.Redirect(mstrPassSlide, False)
        End If

        Response.Redirect(mstrFailSlide, False)
    End Sub

如果计算需要花费一些时间,则可以在OnInit中完成并将结果存储在某个地方。