2012-01-26 5 views
2

На данный момент я пытаюсь создать страницу ASP.NET, в которой будут перечислены книги из категории, в списке, на основе выбранной вами категории, а затем у меня есть еще две кнопки (один для DESC-заказа и один для заказа ASC). Теперь проблема заключается в том, что когда я нажимаю кнопку ASC или DESC после нажатия кнопки фикции и заполнения окна списка, она стирает окно списка и возвращает меня в событие pageload.Оператор if else ASP.NET C#

Я пробовал перемещать населяющие элементы в событие pageload и когда у меня все работает отлично, но по какой-то причине, когда это делается с помощью другой кнопки, клики просто не работают.

Я довольно новичок в ASP.NET, поэтому очень приветствуются простые объяснения и примеры кода/исправления «newb-friendly»!

Заранее благодарен!

Код Ниже

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; 
     } 
    } 
} 



} 

EDIT: Спасибо за сообщения, он больше не идет прямо назад к событию Pageload и сохраняет изменения в этикетке, чтобы сказать «Fiction», но это все еще переустановка данных в ListBox, когда я нажимаю кнопку ASD или DESC.

ответ

3

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

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

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(); 
} 

} 
0

Попробуйте поместить код из 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(); 
    } 
} 

и для сортировки-metjhod добавить привязки данных

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

Спасибо за помощь! С другой стороны, проблема с обратной записью возникает, так как и эта страница больше не перезагружается до того, что указано в событии pageload, но при этом все же очищает список, когда я использую кнопки ASC или DESC. – user1062411

+0

Когда вы помещаете точку останова в свой метод сортировки, список «книги», вероятно, пуст. Вы можете сохранить список в SessionState, чтобы избежать этой проблемы. – Koen

Смежные вопросы