2010-12-10 13 views
1

jQueryを介してWebメソッドを実行しようとしていますが、カスケード接続のDropboxのペアの内容に基づいてSQLデータベースを照会します。私はメソッドを呼び出して、さまざまなjQueryを使用して結果を取得しようとしましたが、UpdatePanelを使用して1つのポイントで動作させようとしましたが、それぞれの試みの最後に、同じポイントに残っているように見えますただし、最終ラベルテキストに渡される結果文字列は空白です。WebMethodからjQueryの空白の結果

私はWebMethod属性では非常に初歩的な何かを逃したし、誰もが正しい方向に私を指すことができれば疑問に思っていることが推測している:

ターゲット表を、ドライバと呼ばれる、データベース内の4つの列があります。

、ddlModel.SelectedItem.Valueであるべきである整数、MODEL_ID
モデル、ddlModel.SelectedItem.Textされるべきではvarchar(255)、
ドライバは整数です(ビットは試されましたが、問題に影響はありません。レコード作成ページを正しく実行するためにinterが使用されています)。サブフィールドを使用するかどうかを定義する1または0ドライバーは0

であれば、私は彼らが表示されるカスケードドロップダウンボックスを移入するために使用されるテーブルを詳細に説明していないデータは、結果文字列に追加する含まれている結果の文字列
潜水艦、VARCHAR(255)、この機能やその他の情報が必要な場合は、お気軽にお問い合わせください。

次のように私のコードは次のとおりです。お時間を

printers.asmx.vb

Imports System.Web 
Imports System.Web.Services 
Imports System.Web.Services.Protocols 
Imports System.Collections 
Imports System.Collections.Generic 
Imports System.Collections.Specialized 
Imports AjaxControlToolkit 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Configuration 

<WebService(Namespace:="http://printers.mydomainname.com/")> _ 
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ 
<System.Web.Script.Services.ScriptService()> _ 
Public Class printers 
Inherits System.Web.Services.WebService 

<WebMethod()> _ 
Public Function GetMake(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue() 
    Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString 
    Dim sqlConn As SqlConnection = New SqlConnection(strConnection) 
    Dim strMakeQuery As String = "SELECT * FROM manufacturers ORDER BY make ASC" 
    Dim cmdFetchMake As SqlCommand = New SqlCommand(strMakeQuery, sqlConn) 

    Dim dtrMake As SqlDataReader 
    Dim myMake As New List(Of CascadingDropDownNameValue) 

    sqlConn.Open() 
    dtrMake = cmdFetchMake.ExecuteReader 

    While dtrMake.Read() 
     Dim strMakeName As String = dtrMake("make").ToString 
     Dim strMakeId As String = dtrMake("make_id").ToString 

     myMake.Add(New CascadingDropDownNameValue(strMakeName, strMakeId)) 
    End While 

    Return myMake.ToArray 
End Function 

<WebMethod()> _ 
Public Function GetModel(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue() 
    Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString 
    Dim sqlConn As SqlConnection = New SqlConnection(strConnection) 
    Dim strModelQuery As String = "SELECT * FROM printers WHERE make_id = @makeid" 
    Dim cmdFetchModel As SqlCommand = New SqlCommand(strModelQuery, sqlConn) 

    Dim dtrModel As SqlDataReader 
    Dim kvModel As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues) 

    Dim intMakeId As Integer 

    If Not kvModel.ContainsKey("make") Or Not Int32.TryParse(kvModel("make"), intMakeId) Then 
     Return Nothing 
    End If 

    cmdFetchModel.Parameters.AddWithValue("@makeid", intMakeId) 
    Dim myModel As New List(Of CascadingDropDownNameValue) 

    sqlConn.Open() 
    dtrModel = cmdFetchModel.ExecuteReader 

    While dtrModel.Read() 
     Dim strModelName As String = dtrModel("model").ToString 
     Dim strModelId As String = dtrModel("model_id").ToString 

     myModel.Add(New CascadingDropDownNameValue(strModelName, strModelId)) 
    End While 

    Return myModel.ToArray 
End Function 

<WebMethod()> _ 
Public Function GetDriver(ByVal model As String) As String 
    Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString 
    Dim sqlConn As SqlConnection = New SqlConnection(strConnection) 
    Dim strDriverQuery As String = "SELECT * FROM drivers WHERE model = @model" 
    Dim cmdFetchDriver As SqlCommand = New SqlCommand(strDriverQuery, sqlConn) 

    Dim dtrDriver As SqlDataReader 
    Dim intModel As Integer 

    cmdFetchDriver.Parameters.AddWithValue("@model", intModel) 
    Dim strResult As String = "The selected printer is" 

    sqlConn.Open() 
    dtrDriver = cmdFetchDriver.ExecuteReader 

    dtrDriver.Read() 
    Dim intDriver As Integer = dtrDriver("driver") 
    Dim strSubs As String = dtrDriver("subs").ToString 

    If intDriver = 1 Then 
     strResult = strResult + "fully compatible with the Windows 2003 Hosted platform." 
    Else 
     strResult = strResult + "supported on the Windows 2003 Hosted platform via a subsituted driver:" + strSubs 
    End If 

    Return strResult 

End Function 

End Class 

default.aspxを

<%@ Page Language="VB" AutoEventWireup="false" EnableEventValidation="false" Inherits="Printer_Compatibility_Matrix_VB._Default" Codebehind="Default.aspx.vb" %> 

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 

<title>Printer Compatibility Matrix</title> 
<script src="jquery-1.4.4.min.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript"> 
    function CallService() { 
     $.ajax({ 
      type: "POST", 
      url: "printers.asmx/GetDriver", 
      data: $("#ddlModel option:selected").text(), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: OnSuccess, 
      error: OnError 
     }); 
    } 

    function OnSuccess(data, status) { 
     $("#lblResult").html(data.d); 
    } 

    function OnError(request, status, error) { 
     $("#lblResult").html(request.statusText); 
    } 
</script> 

</head> 
<body>   

<form id="form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods = "true"> 
    <Services> 
     <asp:ServiceReference Path="printers.asmx" /> 
    </Services> 
</asp:ScriptManager> 
<div> 

    Manufacturer: <asp:DropDownList ID="ddlMake" runat="server" Width="170" /><br /> 
    Printer: <asp:DropDownList ID="ddlModel" runat="server" Width="170" /><br /> 

    <asp:Button ID="btnDriver" Text="Submit" OnClientClick="CallService(); return false;" runat="server" /> 
    <asp:Label ID="lblResult" Text="&nbsp;" Width="100%" runat="server" /> 


    <cc1:CascadingDropDown 
     id="CascadingDropDown1" 
     runat="server" 
     category="Make" 
     prompttext="Select a Manufacturer..." 
     ServiceMethod="GetMake" 
     ServicePath="printers.asmx" 
     TargetControlId="ddlMake" 
    /> 

    <cc1:CascadingDropDown 
     id="CascadingDropDown2" 
     runat="server" 
     category="Model" 
     prompttext="Select a Printer..." 
     ServiceMethod="GetModel" 
     ServicePath="printers.asmx" 
     TargetControlId="ddlModel" 
     ParentControlId="ddlMake" 
    />  
</div> 
</form> 
</body> 
</html> 

多くのおかげで、

ジム

EDIT

フレデリックによって発見エラーに加えて、私はjQueryのを参照するためにもを忘れていたことが表示されます、私はこれらのエラーに基づいて、私の現在の繰り返しに一致するように上記のコードを修正しています。

現在、ラベルテキストに「内部サーバーエラー」が返されます。私は、このコードで単純な 'Hello World'を呼び出す試みでも、ラベルに空白の結果を返すので、これは私のjavaと関係があると思われます。

答えて

0

これを修正しましたが、テキストの代わりに$( "#ddlModel")val()を渡すことでもう少し手を加え、正しく応答するように管理しました。次のように

は、同様の問題を持つ他の誰のために私の改正作業の機能は以下のとおりです。

printers.asmx.vb

<WebMethod()> _ 
Public Function GetDriver(ByVal model_id As Integer) 
    Dim strConnection As String = ConfigurationManager.ConnectionStrings("PrinterConnection").ConnectionString 
    Dim sqlConn As SqlConnection = New SqlConnection(strConnection) 
    Dim strDriverQuery As String = "SELECT * FROM drivers WHERE model_id = @model_id" 
    Dim cmdFetchDriver As SqlCommand = New SqlCommand(strDriverQuery, sqlConn) 

    Dim dtrDriver As SqlDataReader 
    Dim intModel As Integer 

    cmdFetchDriver.Parameters.AddWithValue("@model_id", intModel) 
    cmdFetchDriver.Parameters("@model_id").Value = model_id 

    Dim strResult As String = "" 

    sqlConn.Open() 
    dtrDriver = cmdFetchDriver.ExecuteReader 

    dtrDriver.Read() 
    Dim intDriver As Integer = dtrDriver("driver") 
    Dim strSubs As String = dtrDriver("subs").ToString 

    If intDriver = 1 Then 
     strResult = "<font color=11CC11>The selected printer is fully compatible.</font>" 
    ElseIf intDriver = 0 Then 
     strResult = "<font color=FF9933>The selected printer may be compatible via the substitute print driver: " + strSubs + "</font>" 
    End If 

    Return strResult 

End Function 

デフォルト。aspx

<script src="jquery-1.4.4.min.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript"> 
    function CallService() { 
     $.ajax({ 
      type: "POST", 
      url: "printers.asmx/GetDriver", 
      data: "{ 'model_id': " + $("#ddlModel :selected").val() + "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: OnSuccess, 
      error: OnError 
     }); 
    } 

    function OnSuccess(data, status) { 
     $("#lblResult").html(data); 
    } 

    function OnError(request, status, error) { 
     $("#lblResult").html("<font color=#FF0000>Please make a valid selection.<font>"); 
    } 
</script> 
関連する問題