2011-12-22 25 views
1

lucene.netを使用して検索プログラムを作成しました。検索メソッドは、検索結果とともにhtmlテーブルを含む文字列を返します。この部分はうまくいきましたが、ページ全体を再読み込みせずに検索を提出する機能が欲しかったので、AJAXを使って検索することができました。何らかの理由で私はそれを働かせることはできません。AJAX JQueryとASP.Netをマスターページで使用してフォームを送信

私はエラーを投げるわけではありません。 "Search.aspx"の内容が返されますが、Submitメソッドが実行されないようです。

Search.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Search.aspx.cs" Inherits="Search" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server"> 

<script type="text/javascript"> 
    $(function() {  

     $(".sBM").click(function() { 

      dataString = "valve" 

      $.ajax({ 
       type: "POST", 
       url: "Search.aspx/Submit", 
       //data: dataString, 
       data: dataString, 
       contentType: "application/html; charset=utf-8", 
       dataType: "html", 
       success: function (msg) { 
        $("#searchResults").text(msg); 
        alert(msg); 
       }, 
       error: function (xhr, ErrorText, thrownError) { 
        $("#searchResults").text("Error" + xhr.status); 
       } 

      }); 
      return false; 
     }); 

    }); 

</script> 

</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server"> 

<div class="sHead"> 

    <div id="search_form" class="sSBM"> 
    <form name="search" action=""> 
     <fieldset> 
      <label for="name" id="rpe_label">RPE Search</label> 
      <input type="text" name="query" value="" class="sTM" /> 
      <input type="submit" name="submit" class="sBM" id="submit_btn" value="" />    
     </fieldset> 
    </form> 
    </div> 

</div> 

    <div id="searchResults" ></div>  
</asp:Content> 

CodeFile:

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Services; 

public partial class Search : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    [WebMethod] 

    public static string Submit(string query) 
    { 
     SearchDoc seek = new SearchDoc(); 
     return seek.Search("valve"); 
    } 

} 

答えて

4

あなたはそのような静的なページのメソッドを呼び出すことScriptModuleがあなたのweb.configファイルで構成されている必要があります。あなたは、組み込みの開発用ウェブサーバーを使用してVisual StudioでASP.NET 3.5プロジェクトを実行している場合は、のsystem.web /のHttpModulesの内側に、これはあなたのweb.configファイルであることを確認してください。

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

あなたの場合system.webServer /のHttpModulesの内側に、これはあなたのweb.configファイルであることを確認し、IISを使用している:あなたは右の設定を持っていない場合

<remove name="ScriptModule"/> 
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

は、それが共通であることSearch.aspxへのポスト/ Submitは完全なページを返すだけで、その場合はあなたのWebメソッドは呼び出されません。 ScriptModuleの役割は、この要求をWebメソッドにマップし、その戻り値を応答として返すことです。


そのdoes't作業は(すでに右の構成を有している)、JSONでも(application/jsonにあなたの要求のcontentTypeを設定すると、おそらくも、あなたのWebメソッドを使用すると、クエリパラメータを渡す方法を変更しようとした場合フォーマット):

0

さて、私の最近の仕事、私は私のASP.NETプロジェクトにWebサービスを追加し、とjQueryでこのスニペットを使用します。

 var info = {}; 
     info.Ticket = ticket; 
     info.idCategoria = $('#hidCategoria').val(); 

     var DTO = { 'info': info }; 

     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "MyWebService.asmx/MyTargetFunction", 
      data: JSON.stringify(DTO), 
      dataType: "json", 
      success: function (data) { 
       if (data.d != null) { 
        // My Logic 
       } 
      }, 
      error: function (data) { 
       alert('Error!'); 
      } 
     }); 

私のWebサービスは次のように機能していますこれは:

[WebMethod] 
public ResponseInfo CrearTicket(CreateTicketInfo info) { 
    ResponseInfo i = new ResponseInfo(); 
    _info = info; 

    try 
    { 
     // Logic Here 
    } 
    catch (Exception e) 
    { 
     i.ResponseCode = ContactoConstants.GENERICERROR; 
     i.Message = e.Message; 
    } 

    return i; 
} 
関連する問題