2012-01-11 2 views
0

앱 코드의 클래스 파일에서 컨트롤에 액세스하는 방법은 무엇입니까?앱 코드의 클래스 파일에서 컨트롤에 액세스하는 방법

마크 업 : 클래스

<%@ Page Language="vb" AutoEventWireup="false" Inherits="shoppingCart1.ShoppingPage" CodeFile="ShoppingPage.aspx.vb" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
    <HEAD> 
     <title>ShoppingPage</title> 
     <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> 
     <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE"> 
     <meta content="JavaScript" name="vs_defaultClientScript"> 
     <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> 
    </HEAD> 
    <body> 
     <form id="Form1" method="post" runat="server" name="Form1"> 
      <TABLE id="tblShopping" style="FONT-SIZE:10pt;FONT-FAMILY:verdana" borderColor="black" 
       width="100%" cellSpacing="0" cellPadding="0" border="1" runat="server"> 
       <tr style="FONT-SIZE:10pt;FONT-FAMILY:verdana;color:white;background-color:#336699;font-weight:bold;"> 
        <td colspan="4">PRODUCT LIST</td> 
       </tr> 
       <tr> 
        ***<td id="cellshoping" runat="server" colspan="4" width="100%"></td>*** 
       </tr> 
       <tr> 
       </tr> 
      </TABLE> 
     </form> 
    </body> 
</HTML> 

ShoppingCart.vb을 App_Code 폴더에

cellshoping.InnerHtml 에서 오류가 "cellshoping이 선언되지 않았습니다"
Imports Microsoft.VisualBasic 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Configuration 

Public Class ShoppingCart 
    Public Sub bindData() 
     Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True") 
     Dim objDA As SqlDataAdapter 
     Dim myRow As SqlDataReader 
     Dim comd As New SqlCommand("SELECT * FROM products", con) 
     con.Open() 
     myRow = comd.ExecuteReader() 
     Dim strRowGen As String = "" 
     While myRow.Read() 
      strRowGen = strRowGen & "<TR>" 
      strRowGen = strRowGen & "<TD>" & myRow.GetValue(0) & "</TD>" 
      strRowGen = strRowGen & "<TD>" & myRow.GetValue(1) & "</TD>" 
      strRowGen = strRowGen & "<TD>" & myRow.GetValue(2) & "</TD>" 
      strRowGen = strRowGen & "<TD><a href='#' onclick=""javascript:document.Form1.action='ShoppingPage.aspx?Actn=Add&itemId=" & myRow.GetValue(0) & "';document.Form1.submit();"">Add To Cart</TD>" 
      strRowGen = strRowGen & "</TR>" 
      **cellshoping**.InnerHtml = strRowGen 
     End While 
    End Sub 
End Class 

내가 할 ...에 액세스하는 방법을 사용자 컨트롤 앱 코드에있는 파일 ??

ADDED ASPX 코드 뒤에

Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Configuration 


Namespace shoppingCart1 

Partial Class ShoppingPage 
    Inherits System.Web.UI.Page 
#Region " Web Form Designer Generated Code " 

    'This call is required by the Web Form Designer. 
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() 

End Sub 
Protected WithEvents Label1 As System.Web.UI.WebControls.Label 
Protected WithEvents Label2 As System.Web.UI.WebControls.Label 
Protected WithEvents Label3 As System.Web.UI.WebControls.Label 
Protected WithEvents txtNK As System.Web.UI.WebControls.TextBox 
Protected WithEvents txtCF As System.Web.UI.WebControls.TextBox 
Protected WithEvents txtHA As System.Web.UI.WebControls.TextBox 
Protected WithEvents dtGrdProducts As System.Web.UI.WebControls.DataGrid 


Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 
    'CODEGEN: This method call is required by the Web Form Designer 
    'Do not modify it using the code editor. 
    InitializeComponent() 
End Sub 

#End Region 
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    'Put user code to initialize the page here 
    'Load data by calling function bindData() 
      Dim sCart = New ShoppingCart 
      If Not Page.IsPostBack Then 

       cellshoping.InnerHtml = sCart.bindData() 
      End If 
    Dim strQty As Integer 
    Dim proId As String 
    Dim delId As String 

    delId = Request.QueryString("delItemId") 
    proId = Request.QueryString("itemId") 
     '------ Following portion act as controller where code is written as 
     '------ per the action from the request of the pages like Add To Cart, 
     '------ Update Cart & Delete Cart 
    strQty = 1 
    If Request.QueryString("Actn") <> "" Then 
     If Request.QueryString("Actn").Equals("Add") Then 
        If Request.QueryString("itemId") <> "" Then 
         AddToSession(proId, strQty) 
         Response.Redirect("./ShoppingCart.aspx") 
        End If 
     ElseIf Request.QueryString("Actn").Equals("Del") Then 
      If Request.QueryString("delItemId") <> "" Then 
       Session.Remove(delId) 
       Response.Redirect("./ShoppingCart.aspx") 
      End If 
     ElseIf Request.QueryString("Actn").Equals("Update") Then 
      If Request.QueryString("itemUpId") <> "" And Request.QueryString("quantity") <> "" Then 
       If IsNumeric(Request.QueryString("itemUpId")) Then 
        updateCart(Request.QueryString("itemUpId"), Request.QueryString("quantity")) 
        Response.Redirect("./ShoppingCart.aspx") 
       Else 
        Response.Redirect("./ShoppingCart.aspx") 
       End If 
      End If 
     End If 
    End If 
End Sub 
Private Sub AddToSession(ByVal strProduct As String, ByVal intQty As Integer) 
    If Not Session(strProduct) Is Nothing Then 
     Session.Add(strProduct, CInt(Session(strProduct)) + intQty) 
    Else 
     Session.Add(strProduct, intQty) 
    End If 
End Sub 
Private Sub updateCart(ByVal strProduct As String, ByVal qty As Integer) 
    If Not Session(strProduct) Is Nothing Then 
     Session.Add(strProduct, CInt(qty)) 
    End If 
End Sub 

End Class 
End Namespace 

답변

1

그 코드에서 shoppingCart가 클래스가 코드 숨김 페이지의 어딘가에 참조하고 BindData() 메서드가 호출된다고 가정하면, 당신은 몇 가지 선택이있다 :

1) 페이지에 대한 참조를 장바구니의 바인딩 데이터 방법으로 전달하십시오.

2) 페이지의 데이터를 적절하게 업데이트 할 수 있도록 BindData() 메서드에서 페이지로 데이터를 반환하십시오.

3) HttpContext.Current.Handler에 액세스하여 페이지의 인스턴스로 전송할 수 있습니다.

특히 다른 페이지에서 클래스를 사용하려는 경우 데이터를 업데이트하고 옵션 1 또는 3을 사용하거나 옵션 2를 구현하는 데 사용할 수있는 방법이있는 인터페이스를 만드는 것이 좋습니다.

다음은 구현 및 인터페이스 할 코드를 변경하는 방법의 예입니다.

인터페이스 :

Public Interface IShoppingCartPage 
    Sub UpdateData(sCartContents As String) 
End Interface 

페이지 codebeghind (부분) :

Public Class ShoppingPage 
    Implements IShoppingCartPage 

    Public Sub UpdateData(sCartContents As String) Implements IShoppingCartPage.UpdateData 
     cellshopping.innerHtml = sCartContents 
    End Sub 
End Class 

마지막으로 수정 된 쇼핑 카트 클래스 (StringBuilder 클래스의 사용, 훨씬 더 될 것입니다주의 효율적으로 문자열의 concat보다 질문에 :

Public Class ShoppingCart 
    Public Sub bindData(oPage As IShoppingCartPage) 
     Using con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True") 
      Using comd As New SqlCommand("SELECT * FROM products", con) 
       con.Open() 
       Using oReader As SqlDataReader = comd.ExecuteReader() 
        Dim sbHTML As New System.Text.StringBuilder(5000) 
        While oReader.Read() 
         sbHTML.Append("<TR>") 
         sbHTML.Append("<TD>").Append(oReader.GetValue(0)).Append("</TD>") 
         sbHTML.Append("<TD>").Append(oReader.GetValue(1)).Append("</TD>") 
         sbHTML.Append("<TD>").Append(oReader.GetValue(2)).Append("</TD>") 
         sbHTML.Append("<TD><a href='#' onclick=""javascript:document.Form1.action='ShoppingPage.aspx?Actn=Add&itemId=").Append(oReader.GetValue(0)).Append("';document.Form1.submit();"">Add To Cart</TD>") 
         sbHTML.Append("</TR>") 
        End While 

        oPage.UpdateData(sbHTML.ToString()) 
       End Using 
      End Using 
      con.Close() 
     End Using 
    End Sub 
End Class 
+0

competent_tech에서 호출 할 수 있습니다 당신은 방금 쓴 모든 .. 존경스럽게 .. – MethodMan

+0

친절하게 정교하게 ..as @DJKRAZE는 ... 나는 정확히 무엇을 해야할지 이해하지 못했다. –

+0

안녕하세요 ... 친절하게 설명해 드리겠습니다. 튜토리얼 또는 무료 인 경우 친절하게 도와주세요. –

0

왜 당신의 방법을 다시 문자열을 돌리시겠습니까?

Public Function bindData() as String 
    Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True") 
    Dim objDA As SqlDataAdapter 
    Dim myRow As SqlDataReader 
    Dim comd As New SqlCommand("SELECT * FROM products", con) 
    con.Open() 
    myRow = comd.ExecuteReader() 
    Dim strRowGen As String = "" 
    While myRow.Read() 
     strRowGen = strRowGen & "<TR>" 
     strRowGen = strRowGen & "<TD>" & myRow.GetValue(0) & "</TD>" 
     strRowGen = strRowGen & "<TD>" & myRow.GetValue(1) & "</TD>" 
     strRowGen = strRowGen & "<TD>" & myRow.GetValue(2) & "</TD>" 
     strRowGen = strRowGen & "<TD><a href='#' onclick=""javascript:document.Form1.action='ShoppingPage.aspx?Actn=Add&itemId=" & myRow.GetValue(0) & "';document.Form1.submit();"">Add To Cart</TD>" 
     strRowGen = strRowGen & "</TR>"    
    End While 
    Return strRowGen 

End Sub 

그럼 당신은 귀하의 페이지에 당신이 그 ... 나는 그가 그것을하는 것이 무엇인지 이해할 수있을 것이다 생각하지 않는 말을 친절 많은 사용자에게 응답을 할 수 있습니다

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    'Set innerHtml here 
    'cellshoping.InnerHtml = ShoppingCart.bindData() 
End Sub 
+0

ok..i 기술을 사용하고 있습니다. 페이지를 실행하려고하면 ''bindData '가'shoppingCart1.ShoppingCart '의 멤버가 아닙니다. " –

+0

뒤에 aspx 코드를 업데이트했습니다 ... 친절하게 살펴보십시오. –

관련 문제