这个问题与我之前的问题密切相关:How can I retrieve JSONdata from ASP.NET and send it to jQuery? (implementing FullCalendar) .
我正在尝试设置以下 object literal在 ASP.NET 中:
$(document).ready(function () {
$('#calendar').fullCalendar({
events: GetEvents(start, end) //<-- This line is invalid
}
}
上面无效行的右侧应包含对 JSON 数据的引用。
由于我假设这是一个客户端到服务器到客户端的调用,如果我以错误的方式执行此操作,恐怕会存在潜在的安全问题。
我找到了 a tutorial on calling a server-side method from javascript (这对我来说看起来已经过时了)但是是否有一种正确的方法可以将 jQuery 对象文字绑定(bind)到 ASP.NET 中的动态数据集?
例如如何在 ASP.NET 中创建只能由具有适当权限的登录用户调用的响应(每个用户仅允许编辑 0 – * 特定的用户绑定(bind)事件 在日历中)?我如何将该响应返回给 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 之间具有服务方法。
最佳答案
好的,根据您在问题中包含的链接,您似乎正在尝试使用页面方法将数据从服务器获取到客户端。这只是将数据从服务器中继到客户端的一种可能方式,但我会在这个答案中坚持使用它。
在实现页面方法时需要记住一些重要的事情:
- 方法必须是
public
和static
。这意味着您无法像执行回发时那样访问页面中的实例控件。 - 方法必须用
[WebMethod]
属性修饰。 为了获得正确的 javascript 方法来调用页面方法,您的页面上必须有一个
ScriptManager
对象(不严格地说,您也可以使用常规的 ajax 调用它们,但是PageMethods
对象是由脚本管理器添加的):<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"> </asp:ScriptManager>
从脚本调用方法时,使用
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;
}
最后,调用该方法并将结果传递给您的日历。
编辑:一些其他选项(页面方法的替代方案):
- 普通的旧网络服务 (.asmx)
- WCF 服务 (.svc)
- 通用处理程序 (.ashx),或更普遍的任何自定义 HttpHandler,参见 here
- Web API(镇上的新手,请参阅 here)
有关如何使用它们的具体细节因您选择的不同而异。通过使用合适的关键字组合搜索网络,可以轻松找到每个教程。
关于javascript - 如何从 jQuery 对象文字正确调用服务器端 ASP.NET 并将数据返回给 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214669/