Обработка нулевых моделей в партиалах и нулевых модельных значениях - PullRequest
3 голосов
/ 19 сентября 2011

У меня проблемы с выяснением того, как обрабатывать нули при передаче моделей в партиалы, а также при обработке нулевых значений в моделях.

В этом блоке:

@section TaskBar{
     @Html.Partial("_TaskBar", Model);
}

Я получаю эту ошибку:e: \ Views \ Shared_TaskBar.cshtml (107): ошибка CS1002:;ожидается также

???

, возникли проблемы с нулями в частичном

Я пытался: this.userID = ko.observable ("@ if (Model.UserID == null) {"null"} else {Model.UserID} ");

и

this.userID = ko.observable("@(Model.UserID == null)?"null" :Model.UserID");

с;и т.д. ...

Итак, мой вопрос ... моему частичному часто будет передаваться нулевая модель ... так как обрабатывать частичный метод и, если ноль, как обрабатывать в представлении?спасибо!

Ответы [ 2 ]

10 голосов
/ 19 сентября 2011

Я не совсем понимаю, что вы имеете в виду под Model null, потому что в вашем примере проверяется, имеет ли UserId значение null, а не сама модель. Итак, если вы хотите проверить всю модель, лично я буду использовать простой if в начале моего обзора. Как то так

 @model MyViewModel
 @if (Model != null) {
 <div>
    @Model.UserId
 </div>
 }

Или когда вы определяете RenderSection пропуск Required=false, поэтому при объявлении раздела вы можете сделать это выборочно, если модель имеет значение или нет.

В вашем layout.cshtml

@RenderSection("Taskbar", false)

На ваших страницах

 @if (Model != null) {
   section TaskBar{
     @Html.Partial("_TaskBar", Model);
   }
 }
3 голосов
/ 05 октября 2011

Чтобы упростить ваш код, вы должны использовать шаблон Null Object .

Вместо использования нулевого значения для представления несуществующего значения, вы используете объект, инициализированный пустыми / бессмысленными значениями. Таким образом, вам не нужно проверять десятки мест на наличие нулей и получать NullReferenceExpections на случай, если вы его пропустите.

Существует еще более простой подход, основанный на этом. Вместо того, чтобы создавать определенный класс NullObject, просто передайте новый экземпляр класса, который вам требуется. Если это простая ViewModel, этого обычно достаточно, так как C # уже инициализирует значения для вас, и, скорее всего, вы хотите большую часть времени.

...