Отправьте форму, используя AJAX JQuery и ASP.Net с мастер-страницами - PullRequest
1 голос
/ 23 декабря 2011

Я написал программу поиска с использованием lucene.net. Метод поиска возвращает строку, содержащую HTML-таблицу с результатами поиска. Эта часть работает, но мне нужна была возможность отправки поиска без перезагрузки всей страницы ... Поэтому я искал и обнаружил, что это можно сделать с помощью AJAX. По какой-то причине я не могу заставить его работать.

Я не выкидываю ошибку. Возвращается содержимое «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");
    }

}

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

В вашем файле web.config должен быть настроен ScriptModule для вызова методов статической страницы.Если вы выполняете проект ASP.NET 3.5 в Visual Studio с использованием встроенного веб-сервера разработки, убедитесь, что он находится в вашем файле 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 просто возвращает всю страницу, и в этом случае ваш веб-метод даже не будет вызываться.Роль ScriptModule состоит в том, чтобы отобразить этот запрос в веб-метод и вернуть его возвращаемое значение в качестве ответа.


Если это не работает (у вас уже есть правильная конфигурация), тогдапопробуйте установить для вашего contentType запроса значение application/json и, возможно, также изменить способ передачи параметра запроса в веб-метод (также в формате JSON):

data: { "query": dataString }, 
contentType: "application/json; charset=utf-8",
dataType: "json",

См. также следующие похожие вопросы:

0 голосов
/ 23 декабря 2011

Ну, я недавно работал с сайтом в ASP.NET, я добавил веб-сервис в свой проект ASP.NET и использую этот фрагмент в 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!');
            }
        });

Мой веб-сервис - это функция, подобная этой:

    [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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...