2012-01-03 11 views
0

静的にせずにページメソッドからインスタンス変数を更新する方法はありますか?ajaxとpagemethodsでページ変数を更新するには?

マイページには、ajaxとpagemethodsを更新したいデータがたくさんあるViewModelオブジェクトがあります。私はasp.netフロントエンドページでViewModelを使用して変数値を出力します。

のViewModelクラス

// ViewModel class 
    public class ItemViewModel 
    { 
     public List<Item> Items = new List<Item>(); 
    } 

**のASP.net Webフォームページ(バックエンド)**

public ItemViewModel ViewModel; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // init ViewModel; 
    } 



    [WebMethod] 
     public static bool GetItems(string userId) 
     { 
      // lots of code... 
      ItemService i = new ItemService(); 

      ViewModel = i.GetItems(userId); // How to update page variables or pass in a new one? 

      return true; 
     } 

フロントエンド

    <ul> 
         <% foreach (Item i in ViewModel.Items) 
          { %>   
           <li> 
            <%=i.ItemName %> 
           </li> 
         <% } %> 
        </ul> 

答えて

1

複数のページにまたがっているため、セッション状態を使用することはできますが、ユーザーが特定の時間にページを切り替えると、セッションデータが消去されます。これは、次に使用されるためですpageload(あなたが望むものでない限り)。

あなたはまた、あなたの方法はあなたのページに貼り付けられhtmlstring構築するかもしれない:

public string myFunc() 
{ 
    string html = "<li>foo</li"; 
    html += "<li>foo2</li>"; 

    return html; 
} 

をそしてあなたが行うことができますあなたのAjax successコールバックで:

success: function(data) { 
     $("#myUL").html(data); 
}); 

それは動作しますが、それ一次元配列より多くを処理する必要がある場合、指数関数的に困難なhtml文字列を手作業で構築する必要があります。

JSONをAjaxと組み合わせて使用​​することをお勧めします。必要なものを渡し、HTMLとして貼り付けるのではなく、データを扱うことができる簡単な方法です。

http://www.learn-ajax-tutorial.com/Json.cfm

私はこのチュートリアルを読んでお勧めします、それはあなたのJSONが構築され、処理される方法について良いアイデアを提供します。

+0

私は、HTMLのサーバー側を作成するか、少なくともすべてのページデータを生成し、JQueryテンプレートと組み合わせて使用​​することを考えています。 – chobo

+0

HTMLサーバー側を生成するのは、迅速かつ効率的で簡単です。しかし、本当にフルテーブルを生成しようとしているのなら、それは難しいかもしれません。また、私は別のオプションを忘れていました。一つのドロップダウンリストだけを含むパーシャルビューを作成することができます。その後、モデルをモデルに渡してレンダリングすることができます。あなたが見ることができるようにから選択するための多くのオプションがあります:) – Flater

1

ご存じのように、PageMethodsは静的です。静的メソッドがインスタンスを操作することなくインスタンスメンバーを操作する方法はありません。

さらに、要求が完了した後にページインスタンスが存在しないことを理解する必要があります。 であり、操作するインスタンスメンバーはありません。

0

状態情報を1つの要求から別の要求に転送する必要がある場合は、ページインスタンス変数を使用することはできません(ページインスタンスは1回の要求の間のみ存在します)。静的である。

正しいアプローチは、あなたのAjaxなど、コード更新セッション状態を持つことです。セッション状態を使用できない、または使用したくない場合は、他にも可能性があります。

関連する問題