【问题标题】:Adding items to a list with out overwriting the previous item将项目添加到列表而不覆盖前一个项目
【发布时间】:2016-07-18 19:20:18
【问题描述】:

我正在尝试将表单数据发送到确认页面,您可以在其中输入抄送信息以完成交易。我将所有信息添加到一个列表中,稍后我将在新表单上将其编码为隐藏字段,以将信息作为付费发送出去。但是,当我执行 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; }

}

}

【问题讨论】:

  • 可能是因为您在每次页面加载时都在重新创建与会者列表?
  • 我就是这么想的,页面加载函数应该只调用一次吗?
  • 看我的回答。希望对您有所帮助。

标签: c# asp.net forms list


【解决方案1】:

我假设您的参加者数组将是这样的数据类型...每个参加者都有一个 {fn, ln, email, wife, and luncheon} 属性。看起来它们存储在 POST 中,例如 {fn1, ln1, email1, wife1, luncheon1} 是参加者(0),{fn2, ln2, email2, wife2, luncheon2} 是参加者(1),等等。

你可以试试这样循环

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# 为空,它一直循环并创建参与者。

【讨论】:

  • 当我尝试使用参加者(计数)时,它给了我一个错误。我需要将列表切换到数组吗?
【解决方案2】:

您正在 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.

【讨论】:

  • 谢谢,这个页面是您输入您支付的参加会议的人后的登陆页面,将用于收集CC信息并将所有名称存储到数据库中作为付费。所以这将是每个会话一次。我确信有一种更简单的方法可以做到这一点,但我对 asp.net 还是很陌生。
  • 然后就可以使用会话变量了。
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2014-09-07
  • 2020-10-17
相关资源
最近更新 更多