将Web方法添加到自定义服务器控件

时间:2013-04-23 15:04:45

标签: jquery asp.net asmx custom-server-controls asp.net-webcontrol

我创建了一个服务器用户控件,希望它能够使用WebMethod。如果Web方法在我的主应用程序中(作为ASMX文件),它可以正常工作。问题是我希望将此方法包含在与用户控件相同的项目库中,以便我可以将DLL作为独立项目进行分发。因为项目是一个类库,所以我不得不将Web服务变成VB文件而不是.ASMX。当我尝试在我的.VB文件中调用web方法时,似乎没有任何事情发生(没有错误,但我的webmthod上的断点永远不会到达)这可以实现吗?以下是我创建控件的示例:

Web方法,在myClass.VB中:

 <System.Web.Script.Services.ScriptService()> _
 <WebService(Namespace:="http://tempuri.org/")> _
 <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _     
 Public Class myClass
     Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function TestMethod(ByVal prefixText As String) As String
    return "Hello World"
end Function

我的服务器控件在miniActiveDirectorySearch.VB中设置如下:

Public Class miniActiveDirectorySearch
 Inherits WebControl
   Private Sub attachWebResources()  
     ScriptManager.RegisterClientScriptResource(Me, Me.GetType, "myScripts.js")
     ScriptManager.RegisterClientScriptResource(Me, Me.GetType, "jquery-1.4.1.min.js")
   End Sub
    Protected Overrides Sub CreateChildControls()
        createDynamicControls()
        MyBase.CreateChildControls()
    End Sub
    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        attachWebResources()
        MyBase.OnInit(e)
    End Sub
    Private Sub createDynamicControls()
        Controls.Clear()

        Try
            tblMainLayout = buildMaintable() 'builds out the control
            'to save space, I removed how this works.  But, it creates a textbox that
            'has a onKeyPress Event.  When the user hits return, it calls the jQuery
            'function serviceCall
            Controls.Add(tblMainLayout)
        Catch ex As Exception
            Throw New ApplicationException("Exception Occurred", ex.InnerException)
        End Try
    End Sub
 end Class

和我的JQuery方法,可以在myScripts.js中找到:

function serviceCall(getText, tbId, divId, bgColor) {
   $.ajax({
    type: "POST",
    url: 'myClass.asmx/TestMethod',
    data: '{"prefixText":"'some test'"}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
       alert('Success')           
    },
    error: function (e) {
         alert('Error')   
    }
});

我创建了服务类并将其包含在与我的用户控件相同的项目中,但从不调用该服务。另一方面,如果我将服务放在我的Web项目中的ASMX文件中,它将很好地到达Web方法。

任何帮助都会很棒

感谢 杰森

1 个答案:

答案 0 :(得分:0)

很抱歉,如果您使用旧的ASMX技术,那么您将无法使用ASMX文件。另一方面,您可以使用WCF执行此操作。