Как вызвать частичное представление с «нулем» для его модели? - PullRequest
8 голосов
/ 15 февраля 2012

Предположим, у меня есть частичное представление с именем UserDetails, для которого в предложении @model задан класс модели с именем User.

Теперь предположим, что у меня есть другой класс модели, который выглядит примерно так:

public sealed class SpecialModel
{
    public User SpecialUser;
    public ... // other stuff
}

Внутри представления для SpecialModel я хочу вызвать свое частичное представление, упомянутое выше:

@model MyProject.Models.SpecialModel
@{ ViewBag.Title = "..."; }
<div class='user'>@Html.Partial("UserDetails", Model.SpecialUser)</div>

Это прекрасно работает , если пользователь не null.Однако, если пользователь null, я получаю это исключение:

System.InvalidOperationException: элемент модели, переданный в словарь, имеет тип «MyProject.Models.SpecialModel», но для этого словаря требуетсяэлемент модели типа «MyProject.Models.User».

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

1 Ответ

18 голосов
/ 15 февраля 2012

Вместо

@Html.Partial("UserDetails", Model.SpecialUser)

напишите более подробный

@Html.Partial("UserDetails", new ViewDataDictionary(Model.SpecialUser))

Это делает этот конкретный сценарий работоспособным.

Однако у него есть и обратная сторона: он очищает всеинформация передается от контроллера.В частности, он очищает всю информацию проверки;если вы публикуете некоторые данные и хотите отобразить сообщение об ошибке проверки в этом частичном представлении, вы не можете использовать эту технику.

...