使用向导ASP.NET的代码使用MultiView失败

时间:2010-03-29 15:07:44

标签: asp.net vb.net linq wizard multiview

我最初创建了一个通过在多视图中的视图之间转换而发生的过程,并且它工作正常。现在,我已将相同的代码移动到ASP.NET向导中,并在第二步中不断抛出错误。错误是: 方法'System.Object AndObject(System.Object,System.Object)'没有支持的SQL转换。 任何想法为什么在将代码移动到向导时会发生这种情况?我确定它有些愚蠢,但我现在已经检查了3-4次代码并且在操作上看起来相同。 这是代码: '确保我们可以使用.NET Framework的LDAP部分。 Imports System.DirectoryServices'允许我们与LDAP连接。 Imports System.Data.Linq.SqlClient'允许我们使用LINQ SQL方法。

部分公共类构建     继承System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ' ******* Grab the LDAP info. for current user.
    Dim ID As FormsIdentity = DirectCast(User.Identity, FormsIdentity)
    Dim ticket As FormsAuthenticationTicket = ID.Ticket
    Dim adDirectory As New DirectoryEntry("LDAP://OU=[info],DC=[info],DC=[info],DC=[info]")
    ' We need to strip off @email.address from the ticket name, so we'll use substring to grab the first 
    ' five characters.
    Dim adTicketID As String = ticket.Name.Substring(0, 5)
    Dim adEmployeeID As String
    adEmployeeID = adDirectory.Children.Find("CN=" & adTicketID).Properties("employeeID").Value

    ' ******* Lets make sure they have signed the housing contract and the community covenant.
    Dim dbContractSigs As New pcRoomOccupantsDataContext
    Dim pcContractSigs = From p In dbContractSigs.webContractSigs _
                         Where p.people_id = adEmployeeID _
                         Select p.res_contract, p.comm_life
    If pcContractSigs.Count.Equals(0) Then
        Response.Redirect("signcontract.aspx")
    Else
        Dim cs As String = pcContractSigs.First.res_contract.ToString
        Dim cos As String = pcContractSigs.First.comm_life.ToString
        If cs = "Y" And cos = "Y" Then
            ' We don't need to do anything.
            ' We use the else statement b/c there are multiple conditions that could occur besides "N"
            ' that would cause us to redirect to the signature page, whereas there is only one valid response - "Y".
        Else
            ' Redirect the individual to our contracts page.
            Response.Redirect("signcontract.aspx")
        End If
    End If

    ' ******* Now lets find out what gender that individual is.
    Dim dbIndividual As New pcPeopleDataContext
    Dim pcIndividual = From p In dbIndividual.PEOPLEs _
                       Join d In dbIndividual.DEMOGRAPHICs On p.PEOPLE_CODE_ID Equals d.PEOPLE_CODE_ID _
                       Where p.PEOPLE_ID = adEmployeeID _
                       Select p, d
    ' Make a session variable that will carry with the user throughout the session delineating gender.
    Session("sgender") = pcIndividual.First.d.GENDER.ToString
    ' Debug Code.
    ' Put a stop at end sub to get these values.
    ' Response.Write(adEmployeeID)

End Sub
Sub LinqDataSource1_Selecting(ByVal sender As Object, ByVal e As LinqDataSourceSelectEventArgs)
    ' Lets get a list of the dorms that are available for user's gender.
    Dim pcDorms As New pcDormsDataContext
    Dim selectedDorms = (From sd In pcDorms.PBU_WEB_DORMs _
                    Where IIf(Session("sgender").ToString = "M", sd.description = "Male", sd.description = "Female") _
                    Select sd.dorm_building).Distinct()
    e.Result = selectedDorms
End Sub
Public Sub Button_ItemCommand(ByVal Sender As Object, ByVal e As RepeaterCommandEventArgs)
    ' ******** Lets pass on the results of our query in LinqDataSource1_Selecting.
    Session("sdorm") = RTrim(e.CommandName)

    ' ******** Debug code.
    ' Response.Write(sDorm)
End Sub
Sub LinqDataSource2_Selecting(ByVal sender As Object, ByVal e As LinqDataSourceSelectEventArgs)
    ' ******** Get a list of rooms available in the dorm for user's gender.
    Dim pcDorms As New pcDormsDataContext
    Dim selectedDorm = (From sd In pcDorms.PBU_WEB_DORMs _
                        Where IIf(Session("sgender").ToString = "M", sd.description = "Male", sd.description = "Female") _
                        And sd.dorm_building = CStr(Session("sdorm")) _
                        Select sd.dorm_room)
    e.Result = selectedDorm
End Sub
Public Sub Button2_ItemCommand(ByVal Sender As Object, ByVal e As RepeaterCommandEventArgs)
    ' ******** Lets pass on the results of our query in LinqDataSource2_Selecting.
    Session("sroom") = RTrim(e.CommandName)
End Sub
Sub LinqDataSource3_Selecting(ByVal sender As Object, ByVal e As LinqDataSourceSelectEventArgs)
    ' ******** Grabs the individuals currently listed as residing in this room and displays them. Note the use of SqlMethods.Like 
    ' for dorm_building, this is due to legacy issues where dorms sometimes have leading or trailing blank spaces. We could have 
    ' also used Trim.
    Dim pcOccupants As New pcRoomOccupantsDataContext
    Dim roomOccupants = (From ro In pcOccupants.webResidents _
                       Where SqlMethods.Like(ro.dorm_building, "%" & CStr(Session("sdorm")) & "%") _
                        And ro.dorm_room = CStr(Session("sroom")) _
                      Select ro.person_name)
    e.Result = roomOccupants

    ' ******** Debug code.
    'Response.Write(CStr(Session("sdorm")))
    'Response.Write(CStr(Session("sroom")))
End Sub
Protected Sub Button4_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button4.Click
    ' ******** Reserve the room for a student.
End Sub

结束班

2 个答案:

答案 0 :(得分:1)

我的旧代码看起来像这样:

Dim selectedDorm = (From sd In pcDorms.PBU_WEB_DORMs _
                            Where IIf(Session("sgender").ToString = "M", sd.description = "Male", sd.description = "Female") _
                            And sd.dorm_building = Session("sdorm").ToString _
                            Select sd.dorm_room)

并且无法正常工作(但在使用MultiView时工作正常)。我改成了这个:

Dim selectedDorm = (From sd In pcDorms.PBU_WEB_DORMs _
                            Where IIf(Session("sgender").ToString = "M", sd.description = "Male", sd.description = "Female") _
                            Where sd.dorm_building = Session("sdorm").ToString _
                            Select sd.dorm_room)

现在它有效。

答案 1 :(得分:0)

没有看到代码就无法分辨;有一个LINQ查询从DB中提取一些信息,现在导致错误。但是,如果没有看到代码,就无法告诉你任何事情。