这是我的控制器代码:
public ActionResult Index(string priceMin, string priceMax)
{
lstEventType = HttpRuntime.Cache["EventType"] as List<string>;
if (lstEventType == null || !lstEventType.Any())
{
lstEventType = new List<string>();
lst = artistModel.fillDropDown();
lstEventType = lst.Where(p => p.lookupType == "EventType").Select(q => q.lookupValue).ToList();
HttpRuntime.Cache["EventType"] = lstEventType;
}
ViewData["EventType"] = lstEventType;
artistList = artistModel.displayArtist();
if (!String.IsNullOrEmpty(priceMin))
{
aSession.priceMin = priceMin;
ViewData["priceMin"] = priceMin;
artistList = artistList.Where(p => (string.IsNullOrEmpty(p.strHiddenCost) ? 0 : Convert.ToInt32(p.strHiddenCost)) >= Convert.ToInt32(priceMin)).ToList();
}
if (!String.IsNullOrEmpty(priceMax))
{
aSession.priceMax = priceMax;
ViewData["priceMax"] = priceMax;
artistList = artistList.Where(p => (string.IsNullOrEmpty(p.strHiddenCost) ? 0 : Convert.ToInt32(p.strHiddenCost)) <= Convert.ToInt32(priceMax)).ToList();
}
return View(artistList);
}
如果这个artistList返回非值,那么我没有收到任何错误。但是如果artistList返回null,则视图中的下面部分代码抛出异常。我无法弄清楚这个artistList如何影响viewdata [&#34; EventType&#34;]。
以下是我在视图中的代码
@{
List<string> EventTypes = ViewData["EventType"] as List<string>;
foreach (string eventType in EventTypes)
{
<li><a> <span class="pull-right"></span>@eventType</a></li>
}
}
在迭代这个循环时,我得到索引超出范围异常。如果我的控制器返回一个非空列表到这个视图,那么它的工作正常。但是如果控制器返回空列表以查看此迭代失败。
答案 0 :(得分:0)
变量命名很重要,请尝试使用EventTypeList而不是EventTypes。 此外,由于您使用的是foreach,因此应使用nullcheck。
@{
List<string> EventTypeList= ViewData["EventType"] as List<string>;
if (EventTypeList != null && EventTypeList.Count > 0){
foreach (string eventType in EventTypeList)
{
<li><a> <span class="pull-right">@eventType</span></a></li>
}
}
}
添加的nullcheck将修复控制器发送空列表时发生的问题。