2017-10-12 34 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财产可能有同样的问题。