0

ページを通常のポストバックからAJAX呼び出しに変換する過程で(JavaScriptを使用してUIを完全にロード/制御し、ASP.Netを厳密にバックエンドとして使用する)、GridViewをAJAXソースのデータセットに置き換えたいと思いました。

私は現在、DataTablesを使用してGridViewをきれいにしていますが、APIには、AJAXを使用してテーブルのデータをリモートで調達するオプションがあります。APIにはJSONオブジェクトを返す必要がありますがfnServerData、XML応答を必要なJSONデータソースに変換できるオプションのコールバックを提供できるようです。

「だから」、「<WebMethod()>データソースを返すために一緒に叩いたほうがいい」と思いまし<WebMethod()>た。過去にいくつかの関数を作成しましたが、常に新しいASMXファイルを追加しました(カスタムクラスを使用してそれを駆動する)またはそうすることが理にかなっている既存のものを拡張した。<WebMethod()>この特定のページでは、ページのコンテキスト外でこのテーブルのデータソースにアクセスできるようにする必要がないため、ASPXページのコードビハインドにを追加してみようと思いました。

プログラマーのウェブ上には、私が髪を引っ張ってきたものをうまく引っ張っている例がいくつかあるようです。

私は見つけることができるすべての例に従いましたが、どれも私のために働いていません。誰かが私が間違っているところを指摘するか、ASP.Net 2.0がこのように機能しないことを確認できることを期待して、非常に簡単な例をまとめました。

ASPマークアップ:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="AJAXText.aspx.vb" Inherits="_AJAXText" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
    <script type="text/javascript" src='<%=Helpers.ToAbsoluteURL("~/_cs/js/jquery-1.6.4.min.js") %>'></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: window.location.href + "/Hello",
                data: {
                    "What": "World"
                },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data, textStatus, jqXHR) {
                    $('div').text(textStatus);
                },
                complete: function (jqXHR, textStatus) {
                    $('div').text(textStatus);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    $('div').text(textStatus);
                }
            });
        });
    </script>
</body>
</html>

コードビハインド:

Imports System.Web.Services

Partial Class _AJAXText
    Inherits System.Web.UI.Page

    <WebMethod()> _
    Public Shared Function Hello(ByVal What As String) As String
        Dim msg As String = "Hello, " & What & "!"
        Return msg
    End Function
End Class

私は上記にいくつかの小さな変更を試みましたが、いずれの場合もAJAX呼び出しは次を返します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Untitled Page</title>
    </head>
    <body>
        <form name="form1" method="post" action="AJAXText.aspx?What=World%2fHello"
        id="form1">
            <div>
                <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJOTU4MjMyMzI1ZGQT/2jrJ+cI2ERazl2Hw7l7TI5XiA==" />
            </div>
            <div></div>
        </form>
        <script type="text/javascript" src='http://localhost:3719/Maggie/_cs/js/jquery-1.6.4.min.js'></script>
        <script type="text/javascript">
        $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: window.location.href + "/Hello",
                data: {
                    "What": "World"
                },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data, textStatus, jqXHR) {
                    $('div').text(textStatus);
                },
                complete: function (jqXHR, textStatus) {
                    $('div').text(textStatus);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    $('div').text(textStatus);
                }
            });
        });
        </script>
    </body>
</html>

私が返されることを期待しているのは:

<?xml version="1.0" encoding="utf-8"?>
<string>Hello, World!</string>

誰かが何かアイデアを持っていますか:

  1. 私が間違っていることは何ですか?
  2. または、ASP.Net 2.0は<WebMethod()>ASPXページでを使用できませんか?
4

3 に答える 3

1

データが正しく提供されていないようです。する必要があります:

data: "{' + "What" + ':'" + "World" + "'}",

「What」と「World」は他の場所からの可変値であると想定しているため、これらを選び出しました。

したがって、次の場合:

var x = "World";


.ajax(){
.....
.data: "{'What':'" + x + "'}",

正しいだろう

HTH

于 2012-04-06T19:24:32.690 に答える
0

さて、私はついに完全な答えを見つけました(そして、ソリューションの一部であることが判明したものについては、@ TheGeekYouNeedに+1します)。

ASP.Net 2.0は、すぐに使用できるASPXページではサポートされていません。ASPXページでのWebMethod()サポートを有効にするために(私にとって)合計3つのステップがありました。WebMethod()

  1. Microsoft ASP.NET 2.0 AJAXExtensions1.0をダウンロードしてインストールします。
  2. 私のセクション<httpModules>のセクションに以下を追加します。<system.web>web.config

    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

  3. stringifyに渡されるJavaScriptオブジェクトWebMethod()(およびergo、@ TheGeekYouNeedへの小道具)。jQueryは、JavaScriptオブジェクトをクエリ文字列のキーと値のペアに自動的に変換します。一方、AJAX拡張機能では、HTTP Content-Typeヘッダーをに設定する必要があるため、JavaScriptオブジェクトをJSONに文字列化する必要があります(POST[ing]またはGET[ting]のキー/値ペアに解析されません)application/json。jQueryはdataタイプを変換しないためstring、JavaScriptオブジェクトを最初にJSONに文字列化する必要があります。その後、JSON文字列を免責でAJAX拡張機能に渡すことができます。Webで必要な文字列化に関する情報はたくさんあります。無効なJSONプリミティブを検索するだけです。個人的には、一番いい説明はデイブワードはencosia.comにいます。

アップデート:

実稼働サーバー(IIS7で.Net 4.0フレームワークを実行している)で同じ問題が発生しました。<configuration>本番サーバーの問題を修正するには、要素の下のweb.configに次を追加する必要がありました。

<system.webServer>
    <modules>
      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </handlers>
</system.webServer>
于 2012-04-11T14:15:00.117 に答える
0

正確に機能しています。私は先週からこの問題を研究していました。私のローカルには.NET4がありますが、Webサーバーのために、私のソースは.Net2.0で開発する必要があります。

私がしたこと。

  1. Microsoft ASP.NET2.0AJAX拡張機能1.0。
  2. WEB.CONFIGは、[LINK] [1] [1]に記載されている内容を正確に更新/追加しました:http ://www.asp.net/AJAX/Documentation/Live/ConfigureASPNETAJAX.aspx
于 2014-01-28T10:21:02.300 に答える