4

この質問は、私の以前の質問「ASP.NET から JSONdata を取得して jQuery に送信するにはどうすればよいですか?」と大きく関連しています。(FullCalendar の実装) .


ASP.NET で次のオブジェクト リテラルを設定しようとしています。

$(document).ready(function () {
    $('#calendar').fullCalendar({
        events: GetEvents(start, end) //<-- This line is invalid
    }
}

上記の無効な行の右側には、JSON データへの参照が含まれている必要があります。

これはクライアントからサーバーへの呼び出しであると想定しているため、これを間違った方法で行うと、潜在的なセキュリティの問題が発生する可能性があります。

javascript からサーバー側メソッドを呼び出すチュートリアルを見つけました(私には時代遅れに見えます) が、ASP.NET で動的に jQuery オブジェクト リテラルをデータ セットにバインドする適切な方法はありますか?

たとえば、適切な権限を持つログイン ユーザーのみが呼び出すことができる応答を ASP.NET で作成するにはどうすればよいですか (各ユーザーは、カレンダーで0 – * 特定のユーザー バインド イベントのみを編集できます)。そして、その応答を jQuery オブジェクト リテラルに返すにはどうすればよいでしょうか。

編集:

GetEvents(start, end)リクエストに応じて、メソッドの疑似コードを次に示します。

public JSONData GetEvents(DateTime start, DateTime end) {
    User user = HttpContext.Current.User;
    if(user.Identity.IsAuthenticated && IsValidTimePeriod(start, end)) {
        List<Event> events = EntityFrameWorkService.GetEventsFromDataBase(user, start, end);
        JSONData result = ConvertEventDataToJSON(events);
        return result;
    }
    return null;
}

JSONData返されるJSON-data-object型の任意の種類でありEntityFrameWorkService、GUIとEntity Frameworkの間のサービスメソッドを持つ架空のクラスです。

4

3 に答える 3

4

質問に含まれているリンクに基づいて、ページメソッドを使用してサーバーからクライアントにデータを取得しようとしているようです。これは、サーバーからクライアントにデータを中継する方法の 1 つにすぎませんが、この回答ではそのまま使用します。

ページ メソッドを実装する際に覚えておくべき重要な点がいくつかあります。

  1. メソッドは と でなければなりませpublicstatic。これは、ポストバックを行うときと同じ方法で、ページ内のインスタンス コントロールにアクセスできないことを意味します。
  2. [WebMethod]メソッドは、属性で装飾する必要があります。
  3. ページ メソッドを呼び出すための適切な JavaScript メソッドを取得するには、ページにScriptManagerオブジェクトが必要です (厳密にはそうではありません。通常の ajax を使用して呼び出すこともできますが、PageMethodsオブジェクトはスクリプト マネージャーによって追加されます)。

    <asp:ScriptManager ID="ScriptManager1" runat="server"   
          EnablePageMethods="True">
    </asp:ScriptManager>
    
  4. スクリプトからメソッドを呼び出す場合は、PageMethodsオブジェクトを使用します。サーバー側の Web メソッドが次の場合:

    [WebMethod]
    public static string Echo(string inputValue)
    {
        return inputValue.ToUpperInvariant();
    }
    

    次に、次のように呼び出すことができます(javascript):

    function echoSucceed(data) {
        alert(data);
    }
    function echoError(data) {
        alert('fail');
    }
    
    PageMethods.Echo("conver this to upper case", echoSucceed, echoError);
    

    関数参照を javascript に渡すことに注意してくださいPageMethods.Echo(...)。ページ メソッドの呼び出しが成功したか失敗したかに応じて、いずれかの関数が呼び出されます。

しかし、あなたが尋ねる私の問題はどうですか?

まず、コード ビハインドでページ メソッドを作成します。応答は自動的にシリアライズおよびデシリアライズされるため、ページ メソッドでたとえばイベントのリストを返すことができます。

[WebMethod]
public List<Event> GetEvents(DateTime start, DateTime end) { ... }

このリストは、受信側で配列になります。

次に、ページ メソッドの呼び出しに役立つヘルパー JavaScript 関数を作成します。このようなもの:

function getEvents(start, end) {
    var results;
    PageMethods.GetEvents(start, end, function (data) { results = data; }, function(data) { alert('Error while fetching events'); });
    return results;
}

最後に、メソッドを呼び出して、結果をカレンダーに渡します。

編集:その他のオプション(ページメソッドの代替):

  • プレーン オールド Web サービス (.asmx)
  • WCF サービス (.svc)
  • 汎用ハンドラー (.ashx)、またはより一般的なカスタム HttpHandler については、こちらを参照してください。
  • Web API (町の新しい子供、ここを参照)

これらの使用方法の正確な詳細は、選択したものによって異なります。それぞれのチュートリアルは、適切なキーワードの組み合わせを使用して Web を検索することで簡単に見つけることができます。

于 2012-09-11T04:38:35.893 に答える
0

このようなもの :

$(document).ready(function () { 

   $.ajax({
      type: "POST",
      url:'[YOUR_SERVER_URL]',
      data:{start:'01/01/2012',end:'31/12/2012'},
      success: function(data) {
        $('#calendar').fullCalendar({
            events: data
        });
      } 
   });
});
于 2012-08-31T12:41:04.833 に答える
0

ASP.net から既存の JavaScript に JSON を生成しようとしていることは理解していますが、JSONData を一種のサービスに出力し、javascript/jquery を使用して JSON を取得する方法もあります。

  1. 「http://yourserver/events/?start=somedate&end=someotherdate」に到達したときに、GetEvents メソッドを使用して JSON プレーン テキストで応答するようにサーバーを構成します。
  2. 次を使用して jquery 呼び出しを行います$.getJSON("http://yourserver/events/?start=somedate&end=someotherdate")
于 2012-09-11T01:23:40.350 に答える