2010-08-06 6 views
0

Dans le contrôleur:System.InvalidCastException: dans une vue partielle ASP.NET MVC

public ActionResult Index() 
{ 
    ViewData["page"] = 0; 
    return View(data); 
} 

public ActionResult More(long page = 0) 
{ 
    ViewData["page"] = page; 
    return View(data); 
} 

Donc, j'ai deux vues: Index.aspx et More.aspx. J'ai créé une vue partielle (PartialView.ascx) qui est utilisée dans les deux vues. Dans la vue partielle, il a accédé à la fois à Model et à ViewData. La chose étrange (pour moi en tout cas) est que lorsque j'ai essayé de jeter ViewData [ « page »] à une longue, je recevrais l'exception coulée suivant pour l'une des vues:

System.InvalidCastException: Specified cast is not valid. 

J'ai essayé de jeter la ViewData [ "page"] comme ce qui suit:

if ((long) ViewData["page"] > 1) { ... } 

et

long page = (long) ViewData["page"]; 
if (page > 1) { ... } 

Chacun d'entre eux jetterait une exception coulée dans une vue de l'autre (mais pas les deux). Une différence entre Index.aspx et More.aspx est que Index.aspx utilise une page maître et pas More.aspx.

Quelqu'un aurait-il une idée de ce qui pourrait ne pas fonctionner? S'il vous plaît laissez-moi savoir si j'ai besoin de fournir plus de détails. BTW, je suis farily nouveau à C# et ASP.NET MVC.

Répondre

2

Cette ligne:

ViewData["page"] = 0; 

est réglage de la valeur d'être un int en boîte. Vous essayez de le déballer à long. La façon la plus simple d'éviter cela est à la boîte à un long pour commencer:

ViewData["page"] = 0L; 

... ou utilisez int pour votre numéro de page pour commencer. (Allez-vous vraiment obtenir plus de int.MaxValue pages?)

+0

Re. le type de numéro de page, probablement pas. Mais je reçois ceci d'un service Web et je n'ai pas vraiment le contrôle sur le type. :( Merci pour la suggestion Je vais l'essayer –

+0

Vous devez être en train de plaisanter .... que * c'est * ça! –

Questions connexes