通过静态方法访问页面对象

时间:2012-10-17 09:25:38

标签: c# jquery datepicker static-methods

我正在使用asp.net datepicker。然后当用户通过jquery点击日期时执行静态事件,如:

 <script>
    $(document).ready(function () {
        $("#datepicker").datepicker({
            onSelect: function (dateText, inst) {
                $("#<%= lblDate.ClientID %>").text("Are available on " + $('#datepicker').datepicker({ dateFormat: 'dd-mm-yy' }).val());

                $.ajax({
                    type: "POST",
                    url: "Schedule.aspx/DisplayAvail",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        // Do something interesting here.
                    }
                });
            }
        });
    });
</script>

代码背后:

[WebMethod] 
    public static void DisplayAvail()
    {
         //Grab data from db to check avail from this date
    }

哪个工作正常。但是,从这种静态方法中无法访问页面级对象。如何将此方法的数据发送到页面?

3 个答案:

答案 0 :(得分:1)

看看这里。你可以通过NuGet获得这个

http://james.newtonking.com/projects/json-net.aspx

一旦您将NewtonSoft Json dll添加为包含webmethod的项目的引用,您就可以使用JSONConvert序列化可用日期并将其发送到客户端。

public IEnumerable<string> AvailableData {get; set;}

[WebMethod] 
    public static void DisplayAvail()
    {
        this.AvailableData = GetRequiredData();
        this.AvailableData = JSONConvert.SerializeObject(this.AvailableData);
    }

在客户端,你可以这样做:

$(document).ready(function () {
        $("#datepicker").datepicker({
            onSelect: function (dateText, inst) {
                $("#<%= lblDate.ClientID %>").text("Are available on " + $('#datepicker').datepicker({ dateFormat: 'dd-mm-yy' }).val());
            $.ajax({
                type: "POST",
                url: "Schedule.aspx/DisplayAvail",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                        var arr = <%= this.AvailableData %>;
                       $.each(arr, function(index, value) {
                            // Do something with the data
                       });

                    });
                }
            });
        }
    });
});

答案 1 :(得分:0)

我决定最好的路径是使用JQuery load()函数将外部页面加载到当前页面中:

... Jquery的

$("#GetData").load("getData.aspx?GetDate=012420012");

... HTML

<div id="GetData">
...
</div>

感谢您的所有反馈,但我认为这是最好的方式。干杯! :)

答案 2 :(得分:-1)

您可以尝试使用PageMethods():

这是一个简单的教程Simple PageMethods example.

你还需要这样做:

 <asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="true" />