2016-07-18 46 views
0

我試圖將表單數據發送到確認頁面,您將在其中輸入cc信息以完成交易。我將所有信息添加到列表中,我將稍後在新表單上將其編碼爲隱藏字段,以便將付費信息發送出去。但是,當我做一個repsonse.write來查看存儲的信息是什麼。我總是一遍又一遍地得到同樣的名字。不完全確定我錯過了它。謝謝你的幫助!將項目添加到列表中而不覆蓋之前的項目

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.HttpMethod == "POST"){ 
     formData attendee = new formData(); 
     NameValueCollection nvc = Request.Form; 
     List<formData> attendees = new List<formData>(); 

     if (!string.IsNullOrEmpty(nvc["fn1"])) 
     { 
      var fn = nvc["fn1"]; 
      var ln = nvc["ln1"]; 
      var email = nvc["email1"]; 
      var wife = nvc["wife1"]; 
      var luncheon = nvc["lucheon1"]; 

      attendee.firstName = fn; attendee.lastName = ln; attendee.email = email; attendee.wife = wife; attendee.luncheon = luncheon; 
      attendees.Add(attendee); 

     } 
     if (!string.IsNullOrEmpty(nvc["fn2"])) 
     { 
      var fn = nvc["fn2"]; 
      var ln = nvc["ln2"]; 
      var email = nvc["email2"]; 
      var wife = nvc["wife2"]; 
      var luncheon = nvc["lucheon2"]; 

      attendee.firstName = fn; attendee.lastName = ln; attendee.email = email; attendee.wife = wife; attendee.luncheon = luncheon; 
      attendees.Add(attendee); 
     } 

     foreach(var person in attendees) 
     { 
      Response.Write(person.firstName.ToString()); 
      Response.Write(person.lastName.ToString()); 
      Response.Write(person.email.ToString()); 
      Response.Write(person.wife.ToString()); 
      Response.Write(person.luncheon.ToString()); 
     } 
    } 
} 
public class formData 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string email { get; set; } 
    public string wife { get; set; } 
    public string luncheon { get; set; } 

} 

}

+0

可能是因爲您每次頁面加載時重新創建與會者列表? –

+0

這就是我在想,頁面加載函數只調用一次函數? – Justin

+0

看到我的答案。希望能幫助到你。 –

回答

0

我假設你參加者的陣列將是這樣一個數據類型的...每個與會者有{FN,LN,電子郵件,妻子和午餐}財產。看起來像{fn1,ln1,email1,wife1,luncheon1}是參加者(0),{fn2,ln2,email2,wife2,luncheon2}是參加者(1)等存儲在POST中的郵件。

您可以嘗試像這樣循環

var count = 1; 
while (!string.IsNullOrEmpty(nvc["fn" + count])) 
{ 
    attendee(count).firstname=nvc["fn" + count] 
    attendee(count).lastname=nvc["ln" + count] 
    //...for the rest of the fields 
    count++; //be sure and increment count 
} 

直到有數據fn#爲null,它纔會循環並創建與會者。

+0

當我嘗試使用與會者(計數)時,它給了我一個錯誤。我是否需要將我的列表切換到數組? – Justin

0

您正在Page_Load事件中創建列表。 Page_Load事件在每次頁面加載,回傳或不回放時觸發,並在每次事件觸發時重新創建列表。

您可以創建和使用會話變量。作爲一個例子:

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<formData> attendees; 

    if(Session["attendees"] == null) 
    { 
     attendees = new List<formData>(); 
     // your logic logic ... 
     Session["attendees"] = attendees; 
    } 
    else 
    { 
     var attendees = (List<formData>)Session["attendees"]; 
     // your logic ... 
     Session["attendees"] = attendees; 
    } 
} 

我也想考慮打破你的代碼。也許把代碼添加到列表中的一個單獨的方法。

ASP.NET Session State Overview

+0

謝謝,此頁面是登錄頁面,用於輸入您付費參加會議的人員,並將用於收集CC信息並將所有姓名保存到數據庫中作爲付費。所以這將是每個會話一次。我確信有一個更簡單的方法可以做到這一點,但我對asp.net仍然很陌生。 – Justin

+0

然後你可以使用會話變量。 –