2012-01-27 4 views
1

Heres общий код:Invalid Cast Исключение 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>(); 

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"); 

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

     ViewState["books"] = books; 

} 


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

    } 
    if (ViewState["books"] == null) 
     ViewState["books"] = new string[0]; 

    Item_Listbox.DataSource = new List<string>((string[])ViewState["books"]); 
    Item_Listbox.DataBind(); 
} 



} 

недействительного Cast Исключение бросают здесь:

Item_Listbox.DataSource = new List<string>((string[])ViewState["books"]); 

Я довольно новыми для ASP.NET, так что я потерян что может вызвать его, исправления приветствуются!

+1

Что должна сделать эта линия? Вам не нужно просто «Item_Listbox.DataSource = ViewState [" books "]'? – svick

ответ

2

Я думаю, это потому, что вы делаете

private List<String> books = new List<String>(); 
//... 
ViewState["books"] = books; 

, а затем вы пытаетесь бросить List<string> к string[]

Item_Listbox.DataSource = new List<string>((string[])ViewState["books"]); 

Переписывая последнюю строку следующим образом должен решить вопрос:

Item_Listbox.DataSource = (List<string>)ViewState["books"]; 

Или даже

Item_Listbox.DataSource = ViewState["books"]; 

И второе место, где вы следующий код:

if (ViewState["books"] == null) 
     ViewState["books"] = new string[0]; 

If приводит заявление к ложным, так как ViewState уже был установлен после нажатия кнопки, но в целом я хотел бы предложить в соответствии с используемыми структурами данных и изменить этот код на следующий:

if (ViewState["books"] == null) 
     ViewState["books"] = new List<string>(); 
+0

Приведение не требуется. И это не сработает для случая, когда 'ViewState [" books "]' установлен в 'new string [0]'. – svick

+0

уверен, отредактировал мой ответ – Restuta

+0

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

0

У вас есть 2-е место где вы устанавливаете «книги»: ViewState["books"] = books; где books = new List<String>();.

ViewState["books"] = new string[0];

0

ViewState["books"] является List<string>, не string[]. Удалите (string []), и он должен работать. На самом деле вы также можете удалить новый List().

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