簡體   English   中英

如何在asp.net中的webform上使用webmethod

[英]how to use webmethod on webform in asp.net

我的網絡表單上有一個用戶控件,如下所示 在此處輸入圖片說明

我選擇了計划年份,類別類型,類別和位置組,然后單擊搜索,它將返回一個集合,其中包含下拉列表中相應選定項目的programyearID,categorytypeID和positionGroupID,並將其傳遞給已經定義的網絡方法獲取特定的certificationID。

接口

Namespace SI.Certification.UserControl
    Public Interface IUserSearchResultList
         Property DataSource() As User.Learning.Business.HR.UserCollection
         ReadOnly Property List() As User.Web.UI.WebControls.PagedRepeater
    End Interface 
End Namespace

這是我的usercontrol1.vb的代碼

  Public Class curriculum_search
    Inherits System.Web.UI.UserControl
    Implements IUserSearchResultList

  Private _dataSource As UserCollection

  Public Property DataSource As UserCollection Implements UserControl.IUserSearchResultList.DataSource
        Get
            Return _dataSource
        End Get
        Set(value As UserCollection)

        End Set
    End Property

    Public ReadOnly Property List As PagedRepeater Implements UserControl.IUserSearchResultList.List
        Get
            Return ctlListControl
        End Get
    End Property

 #Region  "Public Properties"
 Public Property ProgramYearID() As Int32
        Get
            If Me.ShowProgramYearSearch Then
                If Me.lstProgramYear.SelectedValue = 0 Then
                    Return Integer.MinValue
                Else
                    Return Me.lstProgramYear.SelectedValue
                End If
            Else
                If ViewState("ProgramYearID") Is Nothing Then
                    Return Integer.MinValue
                Else
                    Return ViewState("ProgramYearID")
                End If
            End If
        End Get
        Set(ByVal Value As Int32)
            If Me.ShowProgramYearSearch Then
                Me.lstProgramYear.SelectedValue = Value.ToString()
            End If
            ViewState("ProgramYearID") = Value
        End Set
    End Property

 Public ReadOnly Property CategoryTypeID() As Int32
        Get
            If Me.lstCategoryType.SelectedValue = 0 Then
                Return Integer.MinValue
            Else
                Return Me.lstCategoryType.SelectedValue
            End If
        End Get
    End Property

 Public ReadOnly Property CategoryID() As Int32
        Get
            If Me.lstCategory.SelectedValue = 0 Then
                Return Integer.MinValue
            Else
                Return Me.lstCategory.SelectedValue
            End If
        End Get
    End Property

 Public Property PositionGroupID() As Int32
        Get
            If Me.ShowPositionCodeSearch Then
                If Me.lstPositionGroup.Selected = -1 Then
                    Return Integer.MinValue
                Else
                    Return Me.lstPositionGroup.Selected
                End If
            Else
                If ViewState("PositionGroupID") Is Nothing Then
                    Return Integer.MinValue
                Else
                    Return ViewState("PositionGroupID")
                End If
            End If
        End Get
        Set(ByVal Value As Int32)
            If Me.ShowPositionCodeSearch Then
                Me.lstPositionGroup.Selected = Value.ToString()
            End If
            ViewState("PositionGroupID") = Value

        End Set
    End Property

Public Property ShowPositionCodeSearch() As Boolean
        Get
            If ViewState("ShowPositionCodeSearch") Is Nothing Then
                Return True
            Else
                Return ViewState("ShowPositionCodeSearch")
            End If
        End Get
        Set(ByVal Value As Boolean)
            ViewState("ShowPositionCodeSearch") = Value
            If Not Value Then
                spnPositionGroup.Visible = False
            Else
                spnPositionGroup.Visible = True
            End If
        End Set
    End Property

 Public Property ShowProgramYearSearch() As Boolean
        Get
            If ViewState("ShowProgramYearSearch") Is Nothing Then
                Return True
            Else
                Return ViewState("ShowProgramYearSearch")
            End If
        End Get
        Set(ByVal Value As Boolean)
            ViewState("ShowProgramYearSearch") = Value
            If Not Value Then
                spnProgramYear.Visible = False
            End If
        End Set
    End Property
   #End Region

   #Region "Events"
    Public Event Submit(ByVal sender As Object, ByVal e As System.EventArgs)
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, Me.Load

        If Page.IsPostBack = False Then
            If spnCategoryType.Visible = True Then
                BindCertificationCategoryTypeCollection()
            'method to bind the category collection
            End If
            If spnProgramYear.Visible = True AndAlso Me.ShowProgramYearSearch Then
                BindProgramYearCollection(GetProgramYearCollection())
            'method to bind the porgram year collection
            End If
            If spnPositionGroup.Visible = True AndAlso Me.ShowPositionCodeSearch Then
            End If
            lstPositionGroup.DefaultToPrimary = False
        End If
    End Sub

    Public Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles pnlSearch.SearchClick
        RaiseEvent Submit(sender, e)
    End Sub

這是我必須在用戶控件中使用以傳遞參數的網絡方法

 <WebMethod(Description:="Get list of certification levels")> _
 Public Function GetCertificationLevelsList(ByVal programYearId As Integer, ByVal PositionGroupId As String, ByVal CategoryId As
String) As User.Department.Application.Curriculum.Items
     Dim items As User.Department.Application.Curriculum.Items =  User.Department.Application.Curriculum.CategoryCollection.GetCategoryLevelsList(programYearId,
PositionGroupId, CategoryId)
     items.Sort()
     Return items
 End Function

我被困在這里。

您不能在用戶控件上使用網絡方法。 Web方法必須存在於網頁上。 由於UserControls可以駐留在多個頁面上,因此不能將Web方法放在UserControl的代碼隱藏頁面中。

因此,您的選擇是:

  • 為您的網絡方法創建一個.asmx,然后從您的網絡控件中調用它(舊版本)
  • 創建一個WCF入口點(.svc)並從您的Web控件中調用它(semi-old-skool)
  • 創建一個WebAPI控制器,並從您的Web控件中調用它(new-skool)

但是,您要做的是從用戶控件的代碼背后調用Web服務。 如果要執行此操作,則需要混合服務器端和客戶端。 您的asmx可以從客戶端使用。 您要么需要從asmx復制代碼,要么提供可以在Web服務和用戶控件中使用的抽象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM