[英]List stays populated after PostBack
我有一個.aspx應用程序,用戶在其中輸入名稱,然后將該名稱添加到列表中。 最多可以執行五次。 當用戶單擊按鈕時,輸入的名字將顯示在第一個標簽中。 當用戶輸入另一個名稱並單擊按鈕時,第一個標簽保持不變,下一個標簽顯示新名稱,依此類推。 我的問題是在PostBack上重置了列表。 我正在嘗試使用ViewState來幫助解決此問題,但沒有成功。 任何幫助是極大的贊賞。
編輯:我得到它的工作,所以謝謝大家的幫助。 仍有很大的改進空間,但這是一個很好的起點。
[Serializable]
class Recipient
{
public string Fname { get; set; }
public string MInit { get; set; }
public string Lname { get; set; }
public string Suffix { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnEnter_Click(object sender, EventArgs e)
{
Recipient recipients = new Recipient();
List<string> FName = (List<string>)ViewState["recipientList"];
List<string> MInit = (List<string>)ViewState["recipientList"];
List<string> LName = (List<string>)ViewState["recipientList"];
if (FName == null && MInit == null && LName == null)
{
FName = new List<string>();
MInit = new List<string>();
LName = new List<string>();
}
recipients.Fname = txtFName.Text;
recipients.MInit = txtMinit.Text;
recipients.Lname = txtLName.Text;
FName.Add(recipients.Fname);
MInit.Add(recipients.MInit);
LName.Add(recipients.Lname);
ViewState["recipientList"] = FName;
ViewState["recipientList"] = MInit;
ViewState["recipientList"] = LName;
if (FName.Count == 1 && MInit.Count == 1 && LName.Count == 1)
{
lblFName.Text = FName[0] + " " + MInit[0] + " " + LName[0];
}
if (FName.Count == 4 && MInit.Count == 4 && LName.Count == 4)
{
lblFName1.Text = FName[1] + " " + MInit[2] + " " + LName[3];
}
}
您是否真的需要此清單? 你可以做...
if(lblFName.Text.Equals(String.Empty))
{
lblFName.Text = value;
}
else if(lblFName1.Text.Equals(String.Empty))
{
lblFName1.Text = value;
}//and so on...
我不確定接收器類的目的。 無論如何,您要在添加收件人之前實例化收件人列表。
<asp:TextBox runat="server" ID="txtFName" /><br />
<asp:Button runat="server" ID="btnEnter" Text="Submit" OnClick="btnEnter_Click" /><br />
<asp:Label runat="server" ID="lblFName" /><br />
<asp:Label runat="server" ID="lblFName1" /><br />
<asp:Label runat="server" ID="lblFName2" /><br />
<asp:Label runat="server" ID="lblFName3" /><br />
<asp:Label runat="server" ID="lblFName4" /><br />
[Serializable]
public class Recipient
{
public string name { get; set; }
}
public List<Recipient> recipientList
{
get
{
if (ViewState["recipientList"] != null)
return (List<Recipient>)ViewState["recipientList"];
return new List<Recipient>();
}
set { ViewState["recipientList"] = value; }
}
protected void btnEnter_Click(object sender, EventArgs e)
{
List<Recipient> recipient = recipientList;
recipient.Add(new Recipient{ name = txtFName.Text.Trim()});
recipientList = recipient;
int count = recipient.Count;
if (count == 1)
lblFName.Text = recipientList[0].name;
if (count > 1)
lblFName1.Text = recipientList[1].name;
if (count > 2)
lblFName2.Text = recipientList[2].name;
if (count > 3)
lblFName3.Text = recipientList[3].name;
if (count > 4)
lblFName4.Text = recipientList[4].name;
}
如果按下回車鍵時觸發了回發。 然后,您需要處理在Page_Load中重建列表。 像這樣:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
recipientList = (List<string>)ViewState["recipientList"];
//now load the list
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.