如何从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和实体框架之间具有服务方法的假想类。
好的,根据问题中包含的链接,您似乎正在尝试使用页面方法将数据从服务器获取到客户端。这只是将数据从服务器中继到客户端的一种可能方式,但我将在这个答案中坚持使用它。
在实现页面方法时,有一些重要的事情需要记住:
- 方法必须是
public
和static
。这意味着您不能像回发时那样访问页面中的控件 - 该方法必须使用
[WebMethod]
属性进行修饰 -
为了获得正确的javascript方法来调用page方法,您的页面上必须有一个
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(...)
。根据页面方法调用成功还是失败,将调用其中一个函数。
但你问我的问题是什么
首先,在代码后面创建page方法。请注意,响应将自动序列化和反序列化,因此您可以让page方法返回例如事件列表:
[WebMethod]
public List<Event> GetEvents(DateTime start, DateTime end) { ... }
此列表将成为接收端的一个数组。
接下来,创建一个帮助javascript函数,帮助您调用page方法。类似这样的东西:
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,请参阅此处
- 网络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:
- 配置服务器,使其在点击时使用GetEvents方法以JSON纯文本响应"http://yourserver/events/?start=somedate&end=其他日期"
- 使用以下命令进行jquery调用:
$.getJSON("http://yourserver/events/?start=somedate&end=someotherdate")
- jQuery Error adadvisor.net
- VB NET JQUERY AJAX上出现错误500
- 使用Jquery查找asp.net GridView中的所有复选框
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 使用jquery变量作为.net MVC中ActionLink的参数
- jQuery根据用户选择启用/禁用asp.net控件
- 如何在jquery ajax中处理net::ERR_CONNECTION_REFUSED
- ASP.NET WebMethod将整个页面返回给JQuery ajax请求
- 如何从jQuery对象文本正确调用服务器端ASP.NET并将数据返回给jQuery
- 如何从ASP.NET并将其发送到jQuery?(实现FullCalendar)
- ASP.NET MVC5 jQuery FullCalendar获取事件问题
- jquery和asp.net中的全球化
- asp.net网格视图中的面板-我如何在jquery中找到它
- jquery和 asp.net 文本区域
- jQuery 和 val() 未定义 在使用 Visual Studio 的 ASP.NET 上
- 如何使用jQuery检查文本框中的文本是否 asp.net 选中
- Jquery 引导程序验证 asp.net 母版页不起作用
- jQuery 以选择 asp.net 中的下拉列表控件
- JQuery 消息确认 asp.net
- 是否有对应的javascript/jQuery.NET's可枚举.选择