如何将对象列表放入asp:literal?

时间:2019-04-30 22:22:44

标签: c# asp.net

我有一个类,并且已将对象添加到列表中,然后将列表绑定到复选框列表。当用户检查列表时,答案进入新列表并进行会话,然后重定向到新页面。在新页面上,我希望结果为asp:Literal。但是我不确定该怎么做。

课程:

public class Frukter

{
    public string Navn { get; set; }
    public string Farge { get; set; }
    public string BildeSrc { get; set; }


    public Frukter(string navn, string farge, string bildeSrc)
    {
        Navn = navn;
        Farge = farge;
        BildeSrc = bildeSrc;
    }

}

第一页:

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        List<Frukter> frukt = new List<Frukter>();
        frukt.Add(new Frukter("Appelsin", "Oransj", "~/Appelsin.jpg"));
        frukt.Add(new Frukter("Banan", "Gul", "~/Banan.jpg" ));
        frukt.Add(new Frukter("Eple", "Rød", "~/Eple.jpg" ));



        if (!this.IsPostBack)
        {


            chklst.DataSource = frukt;
            chklst.DataTextField = "Navn";

            chklst.DataBind();
        }

 protected void Resultat_Click(object sender, EventArgs e)

{
        List<object> ChkListe = new List<object>();


        foreach (ListItem item in chklst.Items)
        {
            if(item.Selected)

                // If the item is selected, add the value to the list.
                ChkListe.Add(item);
        }

        Session["selectedChkList"] = ChkListe;
        Response.Redirect("Default2.aspx", false);
    }  
}

第二页,我从会话中删除列表,但不确定如何将其放入asp:literal。

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)

{
        if (!IsPostBack)
        {
            List<object> ResultatList = new List<object>();
            if (Session["selectedChkList"] != null) 
            {
                ResultatList = (List<object>)Session["selectedStrList"]; 

                ResultatLliteral.Text = String.Format("<p>{0} {1}</p> <img src ={3} />", Frukter.Navn, Frukter.farge, Frukter.BildeSrc);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

对您的代码和一些不同的方法有些批评,不确定您的作业是什么,但是我会提供反馈,可能会对您的课程有所帮助。

public class Fruit
{
     public Fruit(string name, string color, string image)
     {
         Name = name;
         Color = color;
         Image = image;
     }

     public string Name { get; }
     public string Color { get; }
     public string Image { get; }
}

您定义了一个构造函数,该构造函数将始终在创建时设置一个值,因此除非您打算在事实发生后修改该对象,否则可以将属性设置为只读。

我个人将使用数据库或其他方式来保留数据,但是对于您的示例,您应该能够执行以下操作:

var fruits = new List<Fruit>() 
{
     new Fruit("Apple", "Red", "..."),
     new Fruit("Grapefuit", "Yellow", "...")
};

// Grab the selected checkbox in the checkbox list item (You'll have to see if a collection is returned or not)
var selectedFruit = chkLFruit.Items.Cast<ListItem>().Where(item => item.Selected);

// Take selected item and pass full object into session.
var filter = fruits.Where(fruit => selectedFruit.Select(t => t.Text).FirstOrDefault(x => String.Compare(x, fruit.Name, true) == 0);

// Create Session
HttpContext.Session["FruitSelection"] = filter;

在尝试使用另一页之前,只需执行以下操作:

var selectedFruits = (List<Fruit>)HttpContext.Session["FruitSelection"];