-4

Я знаю, почему это происходит, я ищу свойство в моей модели, которое может быть или не быть, если оно есть порождает некоторый HTML, если это не оно порождает другую HTML, так что я того, чтобы обернуть его в попытке поймать (который находится в середине Еогеасп:«System.NullReferenceException» в System.Web.Mvc.dll «замедляет загрузку страницы

@try 
{ 
    if (item.tbl_computerinfo.FirstOrDefault().teamviewerID != null) 
    { 
     <td class="text-center"><a href="javascript:TeamviewerConnect(@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)"><img src="~/Content/images/icons/teamviewericon.png" alt='TeamviewerID' border='0' title='@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)'></a></td> 
    } 
} 
catch (Exception) 
{ 
    <td></td> 
} 

Впоследствии это создает сотни:

Exception thrown: 'System.NullReferenceException' in System.Web.Mvc.dll 

на выходе. Это значительно замедляет страницу. Есть ли лучший способ справиться с нулевым r исключение исключения, которое не замедляет страницу?

+0

Вы уверены, что FirstOrDefault не просто возвращает нуль иногда ? –

+0

'try-catch' в Razor. Blech. Подумайте о перемещении этого контроллера. –

ответ

2

Отметьте с нуля FirstOrDefault() перед проверкой teamviewerID. Если вы используете C# 6, добавьте? после FirstOrDefault(). Нулевая проверка выполняется значительно быстрее, чем исключение.

Non C# 6:

var myItem = item.tbl_computerinfo.FirstOrDefault(); 
if (myItem != null && myItem.teamviewerID != null) 
{ 
    <td class="text-center"><a href="javascript:TeamviewerConnect(@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)"><img src="~/Content/images/icons/teamviewericon.png" alt='TeamviewerID' border='0' title='@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)'></a></td> 
} 
else 
{ 
    <td></td> 
} 

C# 6:

if (item.tbl_computerinfo.FirstOrDefault()?.teamviewerID != null) 
{ 
    <td class="text-center"><a href="javascript:TeamviewerConnect(@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)"><img src="~/Content/images/icons/teamviewericon.png" alt='TeamviewerID' border='0' title='@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)'></a></td> 
} 
else 
{ 
    <td></td> 
} 
+0

Это сработало - спасибо. Похоже, я даже не использовал C# 6, несмотря на то, что был в VS 2015. Спасибо. Исправлено это путем таргетинга на C# 6 в расширенных свойствах сборки в проекте и запуске Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform – Trinitrotoluene

1

Вы говорите, что знаете, что собственности может быть не там, а затем просто проверить это свойство?

if (item != null) 

Или какое имущество вы имеете в виду.

1

Просто проверить нуль:

Computerinfo i = item.tbl_computerinfo.FirstOrDefault(); 
if(i != null) { 
    ... 
} 
Смежные вопросы