2013-06-04 76 views
0

我必須使用在ASP.NET 2.0中編寫的舊用戶控件。該控件在ASP.NET 2.0環境中運行良好,但是當該控件與asp.net 4.0一起使用時,它停止工作。ASP.NET UserControl錯誤 - '不是'System.Web.UI.UserControl'的成員。''

這裏是從用戶控制的代碼:

<%@ Control Language="VB" Inherits="ControlDb" Src="../Bin/ControlDb.vb"%> 
<%@ import Namespace="System.Data" %> 
<%@ import Namespace="System" %> 
<%@ import Namespace="System.Data" %> 
<%@ import Namespace="System.Web" %> 
<%@ import Namespace="System.Web.UI" %> 
<%@ import Namespace="System.Web.UI.WebControls" %> 
<%@ import Namespace="System.Web.UI.HtmlControls" %> 
<%@ import Namespace="System.Data.OleDb" %> 
<%@ import Namespace="System.Configuration" %> 

<script runat="server"> 
    ' Public isEditable as Boolean 

    Public Class CommonDb 
     Inherits System.Web.UI.Page 
     Dim ConnectionString As String = "<ConnectionString>" 

    Public Property dbConnection() As String 
     Get 
      Return ConnectionString 
     End Get 
     Set(ByVal Value As String) 
      ConnectionString = Value 
     End Set 
    End Property 


    Public Function Execute_GetID(ByVal strSQL As String) As Long 
     Dim dbConn As New OleDbConnection(ConnectionString) 
     Dim dbComm1 As New OleDbCommand(strSQL, dbConn) 
     Dim dbComm2 As New OleDbCommand("SELECT @@IDENTITY", dbConn) 
     dbConn.Open() 
     dbComm1.ExecuteNonQuery() 
     Dim id As Long = CLng(dbComm2.ExecuteScalar()) 
     Return id 
    End Function 

    Function Execute(ByVal strSQL As String) As Integer 
     Dim dbConn As New OleDbConnection(ConnectionString) 
     Dim dbComm As New OleDbCommand(strSQL, dbConn) 
     Dim rowsAffected As Integer = 0 
     dbComm.Connection = dbConn 
     dbConn.Open() 
     Try 
      rowsAffected = dbComm.ExecuteNonQuery 
     Finally 
      dbConn.Close() 
     End Try 
     Return rowsAffected 
    End Function 

    Public Function FillData(ByVal strSQL As String) As DataSet 
     Dim conn As New OleDbConnection(ConnectionString) 
     Dim adapter As New OleDbDataAdapter 
     Dim ds As New DataSet 
     adapter.SelectCommand = New OleDbCommand(strSQL, conn) 
     adapter.Fill(ds) 
     Return ds 
    End Function 

End Class 


Private Cdb as new ControlDb() 
Private dtR as DataTable 
Private resourceIds as DataRow() 

    Sub Page_Load(Src As Object, E As EventArgs) 
    End Sub 


Public Sub setData() 
dtR = Cdb.FillData("SELECT resourceid FROM VEJLEDNING_RESOURCE WHERE centerid = '" & CenterId & "' AND date='" & DateTime & "' ORDER BY resourceid;").tables(0) 
if dtR.rows.count > 0 then 
    Dim dtB as DataTable = Cdb.FillData("SELECT Count(resourceid) FROM VEJLEDNING_BOOKING WHERE resourceid='" & dtR.rows(0)("resourceid") & "'").tables(0) 
    RBtn.text = FormatDateTime(DateTime,vbShorttime) & "(" & dtR.rows.count & "/" & dtB.rows(0)(0) & ")" 
    RemBtn.Visible=true 
    CType(Page.FindControl("IntervalList"),DropDownList).Enabled=false 
    If dtB.rows(0)(0) >= dtR.rows.count 
     RBtnClass = "BookingBusyEdit" 
    else 
     RBtnClass = "BookingFree" 
    end if 
else 
    RBtn.text = FormatDateTime(DateTime,vbShorttime) & "(0/0)" 
    RBtnClass = "BookingNormalEdit" 
    RemBtn.Visible=false 
end if 
End Sub 


Public ReadOnly Property AddBtnId As Button 
    Get 
    Return AddBtn 
    End Get 
End Property 

Public ReadOnly Property RBtnId As Button 
    Get 
    Return RBtn 
    End Get 
End Property 

Public ReadOnly Property RemBtnId As Button 
    Get 
    Return RemBtn 
    End Get 
End Property 

Public Property Text As String 
    Get 
    Return RBtn.text 
    End Get 
    Set 
    RBtn.text = Value 
    End Set 
End Property 


Public Property DateTime As String 
    Get 
    Return ViewState("time") 
    End Get 
    Set 
    ViewState("time") = Value 
    End Set 
End Property 

Public Property CenterId As String 
    Get 
    Return ViewState("centerid") 
    End Get 
    Set 
    ViewState("centerid") = Value 
    End Set 
End Property 

Public Property isEditable As Boolean 
    Get 
    Return ViewState("isEditable") 
    End Get 
    Set 
    ViewState("isEditable") = Value 
    End Set 
End Property 


Public Property addBtnClass As String 
    Get 
    Return AddBtn.CssClass 
    End Get 
    Set 
    AddBtn.CssClass = Value 
    End Set 
End Property 

Public Property RBtnClass As String 
    Get 
    Return RBtn.CssClass 
    End Get 
    Set 
    RBtn.CssClass = Value 
    End Set 
End Property 

Public Property RemBtnClass As String 
    Get 
    Return RemBtn.CssClass 
    End Get 
    Set 
    RemBtn.CssClass = Value 
    End Set 
End Property 

Sub AddBtn_Click(sender As Object, e As EventArgs) 
    NyPost(ViewState("time")) 
    setData() 
End Sub 

Sub RBtn_Click(sender As Object, e As EventArgs) 
Dim interval as Integer = CType(Page.FindControl("IntervalList"),DropDownList).SelectedItem.Value 
    if isEditable then 
     response.redirect("Resource.aspx?id=" & CenterId & "&dtm=" & DateTime & "&interval=" & interval) 
    else 
     response.redirect("Booking.aspx?id=" & CenterId & "&dtm=" & DateTime) 
    end if 
End Sub 


Sub RemBtn_Click(sender As Object, e As EventArgs) 
setData() 
Try 
    Cdb.Execute("DELETE FROM VEJLEDNING_RESOURCE WHERE centerid = '" & CenterId & "' AND date='" & DateTime & "'") ' Ryd 
    'Cdb.Execute("DELETE FROM VEJLEDNING_RESOURCE WHERE resourceid = '" & dtR.rows (dtR.rows.count-1)("resourceid") & "'") ' Fjern sidste 
Catch ex As Exception 
End Try 
setData() 
End Sub 


Sub NyPost(dato) 
Dim strSQL as string 
    Dim wn As Integer = DatePart("ww", dato, vbMonday, FirstWeekOfYear.FirstFourDays) 
Dim interval as Integer = CType(Page.FindControl("IntervalList"),DropDownList).SelectedItem.Value 
If not session("initialer") = nothing then 
     if wn = 53 then wn = 1 
Try 
strSQL = "INSERT INTO VEJLEDNING_RESOURCE (" 
strSQL = strSQL & "centerid, " 
strSQL = strSQL & "week, " 
strSQL = strSQL & "interval, " 
strSQL = strSQL & "initialer, " 
strSQL = strSQL & "date " 
strSQL = strSQL & ") " 
strSQL = strSQL & "VALUES (" 
strSQL = strSQL & "'" & CenterId & "', " 
strSQL = strSQL & "'" & wn & "', " 
strSQL = strSQL & "'" & interval & "', " 
strSQL = strSQL & "'" & session("initialer") & "', " 
strSQL = strSQL & "'" & dato & "' " 
strSQL = strSQL & ")" 
Cdb.Execute(strSQL) 
Catch ex As Exception 
End Try 
End If 
End sub 

</script> 
<table cellpadding="0" cellspacing="0" border="0"> 
    <tr> 
     <td> 
      <asp:Button title="Tilføj ressource" id="AddBtn" onclick="AddBtn_Click" CssClass="BookingFree" Visible="true" Width="14px" runat="server" Text="+"></asp:Button> 
     </td> 
     <td width="100"> 
      <asp:Button id="RBtn" onclick="RBtn_Click" Width="100px" runat="server"></asp:Button> 
     </td> 
     <td> 
      <asp:Button title="Slet ressource" id="RemBtn" onclick="RemBtn_Click" CssClass="BookingFree" Visible="true" Width="14px" runat="server" Text="-"></asp:Button> 
     </td> 
    </tr> 
</table> 

這裏是從使用用戶控制的文件中的代碼:

<%@ Page Language="vb" Inherits="CommonDb" Src="../bin/CommonDb.vb" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Drawing" %> 
<%@ Register TagPrefix="MyControls" TagName="RB" Src="ResourceButton.ascx" %> 
<script runat="server"> 
    Dim Cdb As New CommonDb 
    Dim ResourceDst As DataTable 
    Dim BookingDst As DataTable 
    Dim dtmCurrent As Date = Now() 
    Dim intDatebuff = (Weekday(dtmCurrent, vbMonday) - 1) * -1 
    Dim dtmMonday As Date = FormatDateTime(DateAdd("d", intDatebuff, dtmCurrent), vbShortDate) 
    Dim WeekDays As String() = {"Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag"} 
    Dim dtmStart As String = "08:00" 
    Dim dtmEnd As String = "19:00" 
    Dim dtmInterval As Integer = 20 
    Dim BInterval As String() = {"10", "15", "20", "25", "30", "40", "60"} 
    Dim CenterId As String 
    Dim cssBtnBar As String 
    Dim isEditable As Boolean 
    Dim strOverskrift As String 
    Dim testYear As String 

    Sub Page_Load(ByVal Src As Object, ByVal E As EventArgs) 

     Response.Expires = 0 
     Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60) + 10) & ";URL=.") 
     CenterId = Request.QueryString("id") 
     If CenterId <> "" Or Not Session("initialer") Is Nothing Then 
      isEditable = (CenterId <> "" And Request.QueryString("admin") <> "" And Not Session("initialer") Is Nothing) 
      If Not isEditable Then 
       strOverskrift = "Book en tid : " 
       cssBtnBar = "display:none;" 
     Else 
      strOverskrift = "Læg vejledertider ind (" & Session("initialer") & ")" 
     End If 

     If Not IsPostBack Then 
      VisChatBtn(getChat()) 
      Cdb.Execute("LP_Cleanup_Vejledning_resource") ' 52 uger 
      If Request.QueryString("dtm") <> "" Then dtmMonday = Request.QueryString("dtm") 
      ShowPage(dtmMonday) 
      ViewState("dtmMonday") = dtmMonday 
     Else 
      dtmMonday = ViewState("dtmMonday") 
     End If 
    Else 
     Response.Redirect(".") 
    End If 
End Sub 

Sub AddControl(ByVal day As String, ByVal e As RepeaterItemEventArgs) 
    'Dim uc = CType(e.Item.FindControl(day), Web.UI.UserControl) 
    Dim uc As Web.UI.UserControl = e.Item.FindControl(day) 
    Dim strTider As String = e.Item.DataItem(day).ToString 
    Dim ResourceRows As DataRow() = ResourceDst.Select("date='" & strTider & "'") 
    Dim rc As Integer = ResourceRows.Length 
    Dim BookingRows As DataRow() = BookingDst.Select("date='" & strTider & "'") 
    Dim br As Integer = BookingRows.Length 

    If isEditable Then 
     uc.RBtnId.text = FormatDateTime(e.Item.DataItem(day).ToString, vbShortTime) & "(" & rc & "/" & br & ")" 
     If rc = 0 Then 
      uc.RemBtnId.Visible = False 
      uc.RBtnClass = "BookingNormalEdit" 
     ElseIf br >= rc Then 
      uc.RBtnClass = "BookingBusyEdit" 
     Else 
      uc.RBtnClass = "BookingFree" 
     End If 
    Else 
     uc.RBtnId.text = FormatDateTime(e.Item.DataItem(day).ToString, vbShortTime) 
     uc.RemBtnId.Visible = False 
     uc.AddBtnId.Visible = False 
     If rc = 0 Then 
      setNormalBooking(uc, FormatDateTime(e.Item.DataItem(day).ToString, vbShortTime)) 
     ElseIf br >= rc Then 
      uc.RBtnId.Attributes.add("onClick", "this.blur();return false;") 
      uc.RBtnClass = "BookingBusy" 
     Else 
      uc.RBtnClass = "BookingFree" 
     End If 
    End If 

    uc.isEditable = isEditable 
    uc.DateTime = strTider 
    uc.CenterId = CenterId 
End Sub 

以下是錯誤消息:

Server Error in '/' Application. 
-------------------------------------------------------------------------------- 

Compilation Error 
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code  appropriately. 

Compiler Error Message: BC30456: 'RBtnId' is not a member of 'System.Web.UI.UserControl'. 

Source Error: 

Line 209: 
Line 210:  If isEditable Then 
Line 211:   uc.RBtnId.text = FormatDateTime(e.Item.DataItem(day).ToString, vbShortTime) & "(" & rc & "/" & br & ")" 
Line 212:   If rc = 0 Then 
Line 213:    uc.RemBtnId.Visible = False 

Source File: \\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx Line: 211 


Show Detailed Compiler Output: 

Microsoft (R) Visual Basic Compiler version 10.0.30319.233 
Copyright (c) Microsoft Corporation. All rights reserved. 

\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(211) : error  BC30456: 'RBtnId' is not a member of 'System.Web.UI.UserControl'. 

     uc.RBtnId.text = FormatDateTime(e.Item.DataItem(day).ToString, vbShortTime) & "(" & rc & "/" & br & ")" 
      ~~~~~~~~~                        
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(213) : error BC30456: 'RemBtnId' is not a member of 'System.Web.UI.UserControl'. 

      uc.RemBtnId.Visible = False 
      ~~~~~~~~~~~     
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(214) : error BC30456: 'RBtnClass' is not a member of 'System.Web.UI.UserControl'. 

      uc.RBtnClass = "BookingNormalEdit" 
      ~~~~~~~~~~~~      
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(216) : error BC30456: 'RBtnClass' is not a member of 'System.Web.UI.UserControl'. 

      uc.RBtnClass = "BookingBusyEdit" 
      ~~~~~~~~~~~~      
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(218) : error BC30456: 'RBtnClass' is not a member of 'System.Web.UI.UserControl'. 

      uc.RBtnClass = "BookingFree" 
      ~~~~~~~~~~~~     
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(221) : error BC30456: 'RBtnId' is not a member of 'System.Web.UI.UserControl'. 

     uc.RBtnId.text = FormatDateTime(e.Item.DataItem(day).ToString, vbShortTime) 
     ~~~~~~~~~                 
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(222) : error BC30456: 'RemBtnId' is not a member of 'System.Web.UI.UserControl'. 

     uc.RemBtnId.Visible = False 
     ~~~~~~~~~~~     
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(223) : error BC30456: 'AddBtnId' is not a member of 'System.Web.UI.UserControl'. 

     uc.AddBtnId.Visible = False 
     ~~~~~~~~~~~     
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(227) : error BC30456: 'RBtnId' is not a member of 'System.Web.UI.UserControl'. 

      uc.RBtnId.Attributes.add("onClick", "this.blur();return false;") 
      ~~~~~~~~~              
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(228) : error BC30456: 'RBtnClass' is not a member of 'System.Web.UI.UserControl'. 

      uc.RBtnClass = "BookingBusy" 
      ~~~~~~~~~~~~     
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(230) : error BC30456: 'RBtnClass' is not a member of 'System.Web.UI.UserControl'. 

      uc.RBtnClass = "BookingFree" 
      ~~~~~~~~~~~~     
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(234) : error BC30456: 'isEditable' is not a member of 'System.Web.UI.UserControl'. 

    uc.isEditable = isEditable 
    ~~~~~~~~~~~~~    
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(235) : error BC30456: 'DateTime' is not a member of 'System.Web.UI.UserControl'. 

    uc.DateTime = strTider 
    ~~~~~~~~~~~   
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(236) : error BC30456: 'CenterId' is not a member of 'System.Web.UI.UserControl'. 

    uc.CenterId = CenterId 
    ~~~~~~~~~~~   
\\Webfilefs\websites\DATAPOOL006\u12jbyv\wwwroot\vejlederbooking\hfvuc.aspx(405) : warning BC40004: WithEvents variable 'header' conflicts with property 'header' in the base class 'Page' and should be declared 'Shadows'. 

    Protected WithEvents header As Global.System.Web.UI.WebControls.Literal 

如何在4.0下使用此控件?

+0

RBtnId屬性是什麼類? –

回答

0

我認爲WithEvents variable 'header' conflicts with property 'header' in the base class 'Page' and should be declared 'Shadows'.正在產生問題。嘗試解決這個錯誤,看看會發生什麼。

+0

我嘗試將'header'重命名爲'header2',沒有區別,同樣的錯誤。 – user1359448

0

我有一些舊的用戶控件在調試模式下工作正常,但是當我嘗試發佈站點時,我收到了同樣的錯誤,您收到了我爲控件定義的屬性「不是系統的成員。 Web.UI.WebControl「。

我想在我的UserControl頂部的塊中聲明屬性爲「Public」就足夠了。但是,似乎aspnet_compiler的工作方式使得它在嘗試發佈站點時無法識別此屬性。我沒有深入研究這個問題,以瞭解它爲什麼不起作用(最後期限,你知道)。如果任何人都可以解釋這種行爲,我很想聽聽它背後的原因!

修復?我最終將用戶控件的所有代碼移動到了文件後面的代碼中,而不是將其包含在控件本身頂部的標記中。一旦我這樣做,該網站編譯和發佈沒有任何錯誤。

+0

歡迎來到StackOverflow!如果內容重新安排在上面的解決方案和後面的描述中,您的答案會更有幫助。 – kukido

相關問題