繁体   English   中英

如何从jQuery对象文字中正确调用服务器端ASP.NET并将数据返回到jQuery

[英]How to properly call server-side ASP.NET from jQuery object literal and return data to jQuery

这个问题与我之前的问题密切相关: 如何从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数据对象类型, EntityFrameWorkService是一个虚构的类,它在GUI和Entity Framework之间具有服务方法。

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

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

  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(镇上的新孩子,请看这里

有关如何使用这些内容的具体细节取决于您选择的具体内容。 通过使用适当的关键字组合来搜索网页,可以轻松找到每个教程。

这样的事情:

$(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
        });
      } 
   });
});

我知道你试图从ASP.net生成一些JSON到现有的javascript中,但另一种方法是将JSONData输出到一种服务中并使用javascript / jquery来获取JSON:

  1. 配置服务器在遇到“http:// yourserver / events /?start = somedate&end = someotherdate”时使用GetEvents方法使用JSON纯文本进行响应。
  2. 使用以下$.getJSON("http://yourserver/events/?start=somedate&end=someotherdate")进行jquery调用: $.getJSON("http://yourserver/events/?start=somedate&end=someotherdate") ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM