关于从静态方法asp.net 4.0访问页面控制的问题

时间:2012-06-06 12:35:07

标签: jquery asp.net

我通过jquery调用我的服务器端方法,并且从该方法我尝试访问文本框数据。这是我的示例代码

    [WebMethod]
    public static PayPalCart CreatePayPalFields()
    {
        Page CurPage = HttpContext.Current.Handler as Page;
        string tt = ((TextBox)CurPage.FindControl("txtBillAddress1")).Text; 
    }

我从静态方法访问控件时遇到错误,错误消息是对象引用未设置为对象的实例。然后我搜索谷歌找出更好的解决方案然后我有一个扩展方法,将循环通过控件收集和返回控制,如果找到。代码就像

public static T BetterFindControl<T>(this Control root, string id) where T : Control
{
    if (root != null)
    {
        if (root.ID == id) return root as T;

        var foundControl = (T)root.FindControl(id);
        if (foundControl != null) return foundControl;

        foreach (Control childControl in root.Controls)
        {
            foundControl = (T)BetterFindControl<T>(childControl, id);
            if (foundControl != null) return foundControl as T;

        }
    }

    return null;
}

我也使用上面的例程来自静态方法,如

    [WebMethod]
    public static PayPalCart CreatePayPalFields()
    {
        Page CurPage = HttpContext.Current.Handler as Page;
        string sData = CurPage.BetterFindControl<TextBox>("txtDeliveryFName").Text; 
    }

但仍然没有运气....从静态方法访问控件仍然得到相同的错误,发现 CurPage 无法控制。请建议我该怎么办。告诉我一个从静态方法访问控制的方法,因为方法必须是静态的,因为我正在通过jquery调用该方法.........需要帮助。

1 个答案:

答案 0 :(得分:0)

您无法通过此ajax调用访问该页面,这很简单,因为在此调用发生时,该页面不存在。

您可以做的是通过ajax调用发送您想要检查的参数,并使用javascript获取并发送它们。

更多关于通话的说法。

string sData = CurPage.BetterFindControl<TextBox>("txtDeliveryFName").Text;

这是对.Form post数据的最后调用,用于读取id为txtDeliveryFName的控件发送的内容。在你的ajax调用中没有完整页面的帖子,另一方面你可以通过javascript控制将哪些数据发布到web方法。