2014-10-31 2 views
0

Используя MVC Framework, я получаю простую проблему.MVC Model is null

@model mvc_test.Models.HomeModel 

@{ 
    ViewBag.Title = "Index"; 
} 

<li>@Model.OutputEmail</li>//Error NullReferenceException 

@Html.LabelFor(x => x.OutputEmail, new { @class = "Label"}) 
@Html.TextBoxFor(x => x.OutputEmail) 
@Html.ValidationMessageFor(x => x.OutputEmail) 

Так что моя мысль есть Linq выражение (х => ...) всегда создает новый экземпляр класса. Поэтому мне нужно передать модель через мой взгляд или есть лучшее решение. Поскольку я могу получить доступ к модели через выражения linq.

+0

Где находится код вашего контроллера? –

+1

Согласно комментарию в вашем коде, ошибка происходит до * «выражений Linq», так почему вы думаете, что они связаны вообще? * Вы * поставляете экземпляр модели в представление? – David

+2

Вы возвращаете свою модель в своем представлении? Держу пари, это проблема. Также я думаю, что у вас есть грубое непонимание того, что LINQ – Jonesopolis

ответ

3

Этот код:

@Model.OutputEmail 

ссылается на экземпляр модели, переданного зрения. Тем не менее, этот код:

@Html.LabelFor(x => x.OutputEmail) 

делает не ссылки реального экземпляра модели. Он отражает модель модели и производит разметку, предназначенную для этого типа.

Так что, если вы не передаете модель с точки зрения, то первая линия потерпит неудачу, потому что экземпляр модели является null, но второй будет успешным, потому что тип модели до сих пор неизвестно.

+0

Таким образом, метод LabelFor создает экземпляр. Кто-то должен это делать или нет? Я не могу получить данные из ничего. –

+0

@ MR.ABC: Нет, 'LabelFor' не создает экземпляр модели. Он создает разметку HTML. Дело в том, что вам не нужно предоставлять экземпляр модели, чтобы использовать «LabelFor». Но вы * должны * предоставить экземпляр модели, чтобы ссылаться на значение свойства экземпляра на этой модели. Что не имеет никакого отношения к методам LabelFor или аналогичным HTML-помощникам. – David

+0

Я знаю, что LabelFor создает разметку HTML. Где-то в MVC необходимо создать экземпляр модели для получения данных. –

1

Ваша модель пуста. Вы можете использовать @Html.DisplayFor(x => x.OutputEmail), или вы можете проверить значение null, а затем не пытаться вывести значение, если оно равно null. Или вы можете создать объект для модели в контроллере.