0

ユーザーが名前を入力すると、その名前がリストに追加される .aspx アプリケーションがあります。これは 5 回まで実行できます。ユーザーがボタンをクリックすると、最初に入力した名前が最初のラベルに表示されます。ユーザーが別の名前を入力してボタンをクリックすると、最初のラベルは同じままで、次のラベルには新しい名前が表示されます。私の問題は、ポストバックでリストがリセットされることです。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];
        }

    }
4

3 に答える 3

0

これには本当にリストが必要ですか?あなたはできる...

if(lblFName.Text.Equals(String.Empty))
{
    lblFName.Text = value;
}
else if(lblFName1.Text.Equals(String.Empty))
{
    lblFName1.Text = value;
}//and so on...
于 2013-03-12T18:53:19.780 に答える
0

Recipient クラスの目的がわかりません。とにかく、受信者を追加する前に受信者リストをインスタンス化する必要があります。

ここに画像の説明を入力

<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;
}
于 2013-03-12T20:58:30.583 に答える
0

入力ボタンを押したときにポストバックが発生している場合。次に、Page_Load でリストの再構築を処理する必要があります。このようなもの:

 protected void Page_Load(object sender, EventArgs e)
 {
    if (!IsPostBack)
    {
        recipientList = (List<string>)ViewState["recipientList"];

        //now load the list
    }
  }
于 2013-03-12T21:00:48.157 に答える