If / else оператор ASP.NET C # - PullRequest
       15

If / else оператор ASP.NET C #

2 голосов
/ 27 января 2012

На данный момент я пытаюсь создать страницу 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;
        }
    }
}



}

РЕДАКТИРОВАТЬ: Спасибо за сообщения, он больше не возвращается прямо к событию загрузки страницы и сохраняет изменение в метке, чтобы сказать «Fiction», но он все еще сбрасывает данные в ListBox, когда я нажимаю кнопку ASD или DESC ,

Ответы [ 3 ]

3 голосов
/ 27 января 2012

Вам нужно проверить, является ли это постбэком или нет в вашем 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.

0 голосов
/ 27 января 2012

Попробуйте поместить код из Page_PreRender в Page_Load

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

        Item_Listbox.DataSource = books;  
        Item_Listbox.DataBind();  
    }  
}

и для сортировки-добавления добавьте данные

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;   
        }   
    }  
    Item_Listbox.DataSource = books;  
    Item_Listbox.DataBind();  
}   
0 голосов
/ 27 января 2012

Проверка загрузки страницы и модифицированного события команды сортировки

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)
{
if(!IsPostBack){

    Header_Label.Text = "Welcome! Please select a book category.";
    Item_Listbox.DataSource = books;
    Item_Listbox.DataBind();

}

}



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;
        }
    }
    Item_Listbox.DataSource = books;  
    Item_Listbox.DataBind();  
}

}
...