0

サーバー側のメソッドをjqueryで呼び出し、そのメソッドからテキストボックスのデータにアクセスしようとしています。これが私のサンプルコードです

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

静的メソッドからコントロールにアクセスするとエラーが発生し、エラー メッセージはObject reference not set to an instance of an objectです。次に、グーグルを検索してより良い解決策を見つけ、コントロールコレクションをループして、見つかった場合はコントロールを返す拡張メソッドを取得しました。コードは次のようになります

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でそのメソッドを呼び出しています.........助けが必要です。

4

1 に答える 1

0

この呼び出しが発生したときにページがどこにも存在しないため、この ajax 呼び出しからページにアクセスすることはできません。

できることは、確認したいパラメーターを ajax 呼び出しを介して送信し、javascript を使用してそれらを取得して送信することです。

call が何をするかについてもう少し言うと。

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

これは、ID txtDeliveryFName のコントロールによって送信されたものを読み取るための .Form ポスト データの最終呼び出しです。あなたのajax呼び出しではページ全体の投稿はありません.一方、javascriptを介してwebmethodに投稿するデータを制御します.

于 2012-06-06T12:43:39.323 に答える