【问题标题】:Code that Worked with MultiView fails with Wizard ASP.NET使用 MultiView 的代码使用 Wizard ASP.NET 失败
【发布时间】:2010-03-29 15:07:44
【问题描述】:

我最初创建了一个通过在多视图中的视图之间进行转换而发生的过程,它运行良好。现在,我已经将相同的代码移到了 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 方法。

部分公共类 buildit 继承 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

结束类

【问题讨论】:

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


    【解决方案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)
    

    并且没有工作(但在使用 MultiViews 时工作)。我把它改成了这样:

    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)
    

    现在它可以工作了。

    【讨论】:

      【解决方案2】:

      不看代码无法判断;有一个 LINQ 查询从数据库中提取一些信息,现在导致错误。但是不看代码什么都不能告诉你。

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 1970-01-01
        • 2014-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 1970-01-01
        相关资源
        最近更新 更多