c# - If/else 语句 ASP.NET C#

标签 c# asp.net listboxitems

截至目前,我正在尝试创建一个 ASP.NET 页面,该页面将根据您选择的类别按钮在列表框中列出某个类别中的书籍,然后我还有另外两个按钮(一个用于 DESC 顺序,一个用于ASC 顺序)。现在的问题是,当我在点击小说按钮并填充列表框后单击 ASC 或 DESC 按钮时,它会删除​​列表框并将我带回到页面加载事件。

我尝试将填充项目移至页面加载事件,当我一切正常时,但由于某种原因,当通过其他按钮单击执行此操作时,它无法工作。

我对 ASP.NET 还很陌生,所以非常欢迎简单或“新手友好”的解释和代码示例/修复!

提前致谢!

下面的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class partin : System.Web.UI.Page
{
private List<String> books = new List<String>();

public void Page_PreRender()
{
    Item_Listbox.DataSource = books;
    Item_Listbox.DataBind();
}

int SortASC(string x, string y)
{
    return String.Compare(x, y);
}

int SortDESC(string x, string y)
{
    return String.Compare(x, y) * -1;
}

protected void Page_Load(object sender, EventArgs e)
{
    Header_Label.Text = "Welcome! Please select a book category.";


}



protected void Fiction_Click(object sender, EventArgs e)
{
    Header_Label.Text = "Fiction Section";

    books.Add("Title: The Old Man and The Sea | Decription: An epic novel. | Price: 10 USD | Quantity: 3");
    books.Add("Title: A Game of Thrones | Decription: A tale of fire and ice. | Price: 15 USD | Quantity: 6");
    books.Add("Title: Dracula | Decription: A book about vampires. | Price: 5 USD | Quantity: 7");
    books.Add("Title: Twilight | Decription: An awful book. | Price: Free | Quantity: 1000");  

}


protected void Non_Fiction_Click(object sender, EventArgs e)
{
    Header_Label.Text = "Non-Fiction Section";



}
protected void Self_Help_Click(object sender, EventArgs e)
{
    Header_Label.Text = "Self Help Section";



}

protected void Sort_Command(object sender, CommandEventArgs e)
{
    if (e.CommandName == "Sort")
    {
        switch (e.CommandArgument.ToString())
        {
            case "ASC":
                books.Sort(SortASC);
                break;
            case "DESC":
                books.Sort(SortDESC);
                break;
        }
    }
}



}

编辑:感谢您的帖子,它不再直接返回页面加载事件并保留标签中的更改为“小说”,但当我单击 ASD 或 DESC 按钮时,它仍然会重置列表框中的数据。

最佳答案

您需要检查这是否是 Page_Load 中的回发:

if(!IsPostBack){
  Header_Label.Text = "Welcome! Please select a book category";
  //put your prerender logic in here, too...to populate the list of books.
}

Page_Load 每次都会触发。您通常将页面初始化逻辑放在那里,但对于回发(如按钮单击),您不希望重新运行初始代码。因此,请检查页面是否处于回发状态(IsPostback==true);如果不是,则初始化该页面。否则,让页面根据 ViewState 中存储的内容在回发期间呈现。

关于c# - If/else 语句 ASP.NET C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025055/

相关文章:

c# - 如何在 C# 中使用教科书 RSA 加密 ASCII 字符?

jquery - ASP.Net如何删除自动jquery引用?

c# - 列表框显示成员不起作用

c# - 使用 Console.CursorLeft 进行控制台重定向

c# - 使用生产者/消费者模式和 SqlBulkCopy 将平面文件分块处理到 SQL Server 数据库中

c# - 如何在网站项目的页面上使用其他C#源文件?

c# - 包含超过 100 个项目的列表框崩溃

c# - 拦截包含 NHibernate 生成的参数值的 SQL 语句

c# - 用户控件中的数据列表在尝试分配数据源时抛出空引用异常