我用lucene.net写了一个搜索程序。搜索方法返回包含带有搜索结果的html表的字符串。这部分有效,但我希望能够在不重新加载整个页面的情况下提交搜索...所以我搜索并发现这可以使用AJAX完成。无论出于何种原因,我无法让它发挥作用。
我没有抛出错误。返回“Search.aspx”的内容,但似乎提交方法永远不会执行。
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");
}
}
答案 0 :(得分:4)
您必须在web.config中配置ScriptModule
才能调用此类静态页面方法。如果使用内置开发Web服务器在Visual Studio中运行ASP.NET 3.5项目,请确保它位于web.config中,位于 system.web / httpModules 中:
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
如果您使用的是IIS,请确保它位于您的web.config中,位于 system.webServer / httpModules 中:
<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方法并将其返回值作为响应返回。
如果确实有效(您已经有了正确的配置),那么尝试将您的请求contentType设置为application/json
,也可能会更改将查询参数传递给Web方法的方式(同样以JSON格式):
data: { "query": dataString },
contentType: "application/json; charset=utf-8",
dataType: "json",
另见这些类似的问题:
答案 1 :(得分:0)
我最近在ASP.NET中使用了一个站点,我在我的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;
}