使用AJAX JQuery和ASP.Net与Master Pages提交表单

时间:2011-12-22 22:53:03

标签: jquery asp.net ajax forms

我用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");
    }

}

2 个答案:

答案 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;
}