Вызов WebMethod из ajax, управление не происходит внутри webmethod

jquery asp.net webmethod

886 просмотра

1 ответ

Я пытаюсь вызвать метод codebehind, выполняется success: function () части jquery, но элемент управления, похоже, не входит в вызываемый метод codebehind. Страница ASPX:

<%@ 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

Вывод заставляет меня заключить, что success: function () jquery выполняется (как $ ("# test"). Html ("success"); кажется, выполняется), но текст Label1 по-прежнему является Label, код метода не ' кажется казненным. Почему это происходит? Ваша помощь приветствуется.

Автор: Sumi Sharma Источник Размещён: 08.11.2019 11:04

Ответы (1)


1 плюс

Решение

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

Прежде всего, код JavaScript выполняется на клиентском компьютере, в то время как ASP.net работает на стороне сервера.

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

Когда вы выполняете что-то вроде 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);
    }
    });
Автор: Alex Suleap Размещён: 20.08.2016 08:56
Вопросы из категории :
32x32