2010-08-06 152 views
0

在控制器:System.InvalidCastException:在ASP.NET MVC局部視圖

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

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

所以,我有兩個觀點:Index.aspx的和More.aspx。我創建了一個在這兩個視圖中都使用的局部視圖(PartialView.ascx)。在部分視圖中,它訪問了Model和ViewData。奇怪的(我反正)是,當我試圖施放計算機[「頁」]對長,我會得到如下鑄造例外的意見之一:

System.InvalidCastException: Specified cast is not valid. 

我試着投了計算機[「頁」]這樣的:

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

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

他們每個人都將在對方(但不能同時)一個視圖拋出一個異常鑄造。

Index.aspx和More.aspx之間的一個區別是Index.aspx使用母版頁,而More.aspx則沒有。

有沒有人有任何建議可能是錯的?如果我需要提供更多詳細信息,請讓我知道。順便說一句,我是C#和ASP.NET MVC的新手。

回答

2

這條線:

ViewData["page"] = 0; 

在設置值是一個盒裝int。您正試圖將其取消裝箱到long。避免這個問題的最簡單方法是框的long入手:

ViewData["page"] = 0L; 

...或使用int爲您的頁碼開始。 (你真的會得到超過int.MaxValue頁?)

+0

重新。頁碼的類型,可能不是。但是我從Web服務中獲得了這個,並且我沒有真正控制這個類型。 :( 感謝您的建議,我會嘗試一下 – 2010-08-06 07:09:39

+0

你一定是在開玩笑......那是*它*它!乾杯! – 2010-08-06 07:11:50