Компоненты
@Component
аннотацию метаданных. @View
Декоратор или шаблон шаблона являются обязательными в компоненте. Директива
@Directive
аннотацию метаданных. Источники:
http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html
Как указывает @Dennis, если значение модели равно null, оно будет использовать существующую модель из вида. Причина этого в том, чтобы поддерживать возможность вызова частичного представления с использованием подписи, которая содержит только частичное имя представления, и повторного использования существующей модели. Внутренне все помощники RenderPartial подчиняются одному методу RenderPartialInternal. Способ, которым вы получаете этот метод для повторного использования существующей модели, состоит в том, чтобы передать нулевое значение для модели (что делает подпись, которая принимает только имя представления). Когда вы передаете нулевое значение в подпись, содержащую и имя представления, и объект модели, вы по сути реплицируете поведение метода, который принимает только имя представления.
Это должно решить вашу проблему:
<% Html.RenderPartial( "_Bar", Model.Bar ?? string.Empty ) %>
Если вы передадите значение null в качестве модели для RenderPartial, тогда он будет смотреть на исходную модель, поэтому в сообщении об ошибке написано foo.
Вам необходимо убедиться, что эта полоса инициализируется пустой строкой вместо нуля.
Edit: @Arnis, посмотрите исходный код. Это не вранье. Вы передаете null перегрузке RenderPartial. Вы не передаете Foo . Внутренне система использует модель из ViewContext вашей страницы (которая является Foo ), когда вы передаете нулевую Bar в RenderPartial.
Посмотрите на исходный код ASP.NET MVC (HtmlHelper.cs -> метод RenderPartialInternal -> строка 258):
...
if (model == null) {
if (viewData == null) {
newViewData = new ViewDataDictionary(ViewData);
}
...
это как раз ваш случай. ASP.NET MVC использует ViewData из вашего ViewContext
ОБНОВЛЕНО:
Попробуйте вместо этого:
<% Html.RenderPartial("_Bar", Model.Bar ?? "Default" ); %>