2016-08-20 2 views
1

Я пытаюсь вызвать метод codebehind, функция success() функции jQuery выполняется, но элемент управления, похоже, не входит в вызываемый метод codebehind. ASPX страница:Вызов WebMethod из ajax, управление не происходит внутри webmethod

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication6.WebForm1" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script src="Scripts/jquery-1.10.2.min.js"></script> 
<script> 
    $(document).ready(function() { 

     //$("#Button1").click(); 

    $.ajax({ 
    type: "POST", 
    url: '<%=ResolveUrl("WebForm1.aspx/Method1")%>', 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown); 
    }, 
    success: function (result) { 
     $("#test").html("success"); 
    } 
    }); 
    }) 

</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="True" /> 

<div> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>    
</div> 
    <div id="test">initial</div> 

</form> 

aspx.cs код:

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

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

    } 
    [System.Web.Services.WebMethod()] 
    [System.Web.Script.Services.ScriptMethod()] 
    public static void Method1() 
    { 
     WebForm1 w = new WebForm1(); 
     w.Label1.Text = "code behind"; 
    } 

} 

} 

Выход:

Label 
success 

Выход заставляют меня сделать вывод, что успех: функция() из JQuery получает исполнение (как $ («# test»). html («success»), запускается, кажется), но Текст Label1 по-прежнему Ярлык, код позади метода, похоже, не выполняется. Почему это происходит? Ваша помощь приветствуется.

ответ

1

Проблема заключается в стороне клиента и стороне сервера. Что вы должны понимать при использовании java-скрипта Ajax-запроса с ASP.

Прежде всего код JavaScript работает на клиентской машине, а ASP.net работает на стороне сервера.

Когда запрос ajax выполняется с помощью js, он ожидает некоторый результат от сервера, который обычно является json, xml, memory stream. Вы берете эту информацию и делаете что-то с ней на стороне клиента.

Когда вы выполняете что-то вроде: w.Label1.Text = "code behind"; на стороне сервера в запросе веб-метода не будет работать, потому что вы не обновляете полную страницу, где сервер генерирует значение для элемента управления asp.net.

Для вашего кода, чтобы работать, вы должны написать что-то вроде этого

public class Result 
{ 
    public string State{get;set;} 
    public string Message{get;set;} 
} 

public static Result Method1() 
{ 
    return new Result{State="Success",Message="code behind" }; 
} 

JS:

$.ajax({ 
    type: "POST", 
    url: '<%=ResolveUrl("WebForm1.aspx/Method1")%>', 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown); 
    }, 
    success: function (result) { 
     $("#test").html(result.State); 
     $("#Label1").html(result.Message); 
    } 
    }); 
+0

могли бы вы сказать, что должно быть данные: тип и содержание: в Ajax код? так как я не могу успешно запустить код –

+0

Почему вы используете пост и не получаете; Я не вижу никаких параметров? Данные - это объект сценария java, который содержит параметры запроса, тип контента зависит от конфигурации сервера. Наиболее распространенный contentType: «application/json; charset = utf-8». Вы должны проверить заголовки запросов и ответов в браузере. –

Смежные вопросы