ASP.NET MVC ViewData Null

Sim*_*ang 5 c# asp.net-mvc .net-3.5

我目前正在使用C#ASP.NET MVC创建一个电子商务网站,并且遇到了一个问题.在产品页面和搜索结果页面等页面上,我必须将数据列表从我的控制器传递到ViewPage,并且工作正常.但是,如果Viewdata等于null,则会发生空引用异常.当它遍历ViewData并显示产品或评论时,它会在视图内部发生.

//ProductController.cs

public ActionResult Products_Sub(string category, int page)
{
ViewData["Products"] = database.GetByCategory(category, page);
return View();
}
Run Code Online (Sandbox Code Playgroud)

//ViewPage.cs - 产品循环

 <ul> foreach (E_Store.Models.Product product in ViewData["Products"] as  
 List<e_store.models.product>)
 {%> 
 <li>
 <img alt="<%= product.Title%>" src="<%= product.Thumbnail %>" /> 
 <a href="/<%=product.Category %>/<%= product.SubCategory %>/<%= product.ASIN %>/1">
 <%=product.Title%></a>
 </li>
 }%>
 </ul>    
Run Code Online (Sandbox Code Playgroud)

到达以下代码时会出现Null Reference Exception:

  <ul> foreach (E_Store.Models.Product product in ViewData["Products"] as
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如果确实发生了这种错误,最好的方法是捕获这种类型的错误,而不需要使用if检查它是否为null的语句.

如果有人知道这样做的好方法,我真的很想知道.

Odd*_*Odd 7

在你的情况下,我会有你的database.GetByCategory(category,page)方法只返回一个空列表而不是null,这样你的foreach语句就不会有任何数据循环但你不会得到一个null异常.

如果您没有处理列表并且该项为null,我们使用

Html.Encode(ViewData.Eval("Field"))
Run Code Online (Sandbox Code Playgroud)

要获取项目的HTML值,如果项目为空,它将返回"".