2017-04-05 28 views
0

我想將List<StockInList>綁定到GridView,將它們展示給用戶,並讓它們返回(也許用戶將編輯它們)以執行其他操作。但是,當我檢索綁定項目stockInLists時,它是null。我猜的原因是ASP創建了一個新的代碼隱藏類Add_Inventories來處理請求,所以我失去了訪問我的綁定項目stockInListsASP Web窗體:我應該在哪裏放置綁定的項目?

我做錯了什麼?我該怎麼做才能讓他們恢復正常?

public partial class Add_Inventories : System.Web.UI.Page 
    { 
     private ShoppingDbContext shoppingDbContext = new ShoppingDbContext(); 

     private List<StockInList> stockInLists; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 

     var  stockInListsFromSession =(List<StockInList>)Session["stock_in_list"]; 
       if (stockInListsFromSession != null) 
       { 
//save the stockInLists in private filed, so that I can get them back, however it's null when method `Add()` invoke. 
        stockInLists=new List<StockInList>(stockInListsFromSession); 

        GridView1.DataSource = stockInLists; 
        GridView1.DataBind(); 
       } 
       else 
       { 
        //... 
       } 
      } 
     } 


     protected async void Add(object sender, EventArgs e) 
     { 



      foreach (var stockInList in stockInLists) 
      { 
      shoppingDbContext.StockInLists.Add(stockInList); 
      } 

      await shoppingDbContext.SaveChangesAsync(); 


      Response.Redirect(Request.Url.AbsoluteUri); 
     } 


    } 
+0

Perrhaps當'IsPostBack'爲true時,將調用Add方法,而當IsPostBack爲false時,您只填充'stockInLists'字段。調試器是你的朋友。 – Joe

回答

0

當頁面被刷新(範圍)中的變量數據丟失,以防止它我們應該使用會話視圖狀態等,或使該變量爲靜態(不推薦)。

存儲在stockInLists如果刷新頁面將失去你的案值,

  • 存儲其在ViewState中的數據ViewState["stockInLists"] = stockInLists;
  • 存儲其在會議Session("stockInLists") = stockInLists;數據(推薦)
  • 化妝它是一個靜態變量private List<StockInList> stockInLists;(不推薦)

我希望你理解它:)

+0

「將其數據存儲在視圖狀態...(推薦)」 - 我不同意,在大多數情況下,這是一個壞主意,可能導致ViewState膨脹。 – Joe

+0

@Joe使用會話。 –

相關問題