Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Изменить на:
@{ Response.Redirect("~/HOME/NoResults");}
Это явно плохой случай логики контроллера в представлении. Было бы лучше сделать это в контроллере и вернуть желаемый вид.
[ChildActionOnly]
public ActionResult Results()
{
EnumerableRowCollection<DataRow> custs = ViewBag.Customers;
bool anyRows = custs.Any();
if(anyRows == false)
{
return View("NoResults");
}
else
{
return View("OtherView");
}
}
Измените NoResults.cshtml на частичное.
И вызвать это как частичное представление в родительском представлении
@Html.Partial("Results")
Возможно, вам придется передать коллекцию Customer в качестве модели к действию Result или в ViewDataDictionary по причинам, объясненным здесь: Невозможно получить доступ к ViewBag в частичном представлении в ASP.NET MVC3
Атрибут ChildActionOnly
гарантирует, что вы не сможете перейти на эту страницу путем навигации, и что это представление должно отображаться как частичное Таким образом, по мнению родителей. cfr: Использование ChildActionOnly в MVC