2017-10-12 30 views
-1

我該如何處理一個空的viewbag,它是一個列表,它有時可以是空的 - 一個null?如何將viewbag轉換爲SelectList(如果viewbag爲空) - null?

我收到錯誤:「無法對空引用執行運行時綁定」。

我有一個MVC應用程序,並傳遞一個viewbag(這是一個列表)作爲參數。

有時它可能是空的。

@Html.PagedListPager(Model, page => Url.Action("Index", new { page, movieGenre = (SelectList)ViewBag.movieGenre, searchString = ViewBag.searchString.toString() })) 
+0

您無法使用Url.Action()方法將'SelectList'傳遞給您的方法 - 它是一個複雜對象的集合 - 查看它在非空時產生的查詢字符串/您在此處真正想做什麼。假設你在視圖中有一個下拉列表用於過濾,那麼你需要傳遞值或選擇的選項(請參閱我在上一個問題的聊天會話中給出的鏈接) –

回答

0

如果ViewBag爲空,則可以給出默認值。
(Viewbag.something ?? 'This is the value if Viewbag.something is null')

0

嘗試movieGenre = (SelectList)(ViewBag.movieGenre ?? new SelectList),
我不能在此刻測試了這一點,但我認爲它應該工作,讓我知道,如果它或不。
使用??稱爲空合併,這在許多情況下可能非常方便。

0

如果值不存在,您必須首先嚐試從viewbag拉取值並將其初始化爲空SelectList

請將此代碼的PagedListPager調用之前的任何地方:

@{ 
    SelectList movieGenre = (ViewBag.movieGenre == null) ? new SelectList(new List<string>()) : ViewBag.movieGenre; 
} 

然後使用該實例在您電話的渲染:

@Html.PagedListPager(Model, page => Url.Action("Index", new { page, movieGenre, searchString = ViewBag.searchString.toString() })) 

請注意您的searchString財產可能有同樣的問題。