4

这个问题与我之前的问题密切相关:如何从 ASP.NET 检索 JSONdata 并将其发送到 jQuery?(实现全日历)


我正在尝试在 ASP.NET中设置以下对象文字:

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

上面无效行的右侧应包含对 JSON 数据的引用。

由于我假设这是一个客户端到服务器到客户端的调用,我担心如果我以错误的方式执行此操作,可能会出现潜在的安全问题。

我找到了一个关于从 javascript 调用服务器端方法的教程(对我来说它看起来已经过时了),但是有没有一种正确的方法可以将 jQuery 对象文字动态绑定到 ASP.NET 中的数据集?

例如,如何在 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 数据对象类型,并且EntityFrameWorkService是在 GUI 和实体框架之间具有服务方法的虚构类。

4

3 回答 3

4

好的,根据您在问题中包含的链接,您似乎正在尝试使用页面方法将数据从服务器获取到客户端。这只是将数据从服务器中继到客户端的一种可能方式,但我会在这个答案中坚持下去。

实现页面方法时需要记住一些重要的事情:

  1. 方法必须是publicand static。这意味着您不能以与回发时相同的方式访问页面中的实例控件。
  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(...)。根据页面方法调用是成功还是失败,将调用其中一个函数。

但是你问我的问题呢?

首先,在后面的代码中创建页面方法。请注意,响应将自动被序列化和反序列化,因此您可以让 page 方法返回例如事件列表:

[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(镇上的新手,请参见此处

如何使用这些的确切细节取决于您选择的那个。通过使用合适的关键字组合在网络上搜索,可以很容易地找到每个教程。

于 2012-09-11T04:38:35.893 回答
0

我了解您正在尝试将一些 JSON 从 ASP.net 生成到现有的 javascript 中,但另一种方法是将 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 回答
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 回答