ASP.NET MVC, представления со строгим контролем типов, частичный незначительный сбой параметров представления

Компоненты

  1. Для регистрации компонента мы используем @Component аннотацию метаданных.
  2. Компонент - это директива, которая использует теневой DOM для создания инкапсулированного визуального поведения, называемого компонентами. Компоненты обычно используются для создания виджетов пользовательского интерфейса.
  3. Компонент используется для разбиения приложения на более мелкие компоненты.
  4. Только один компонент может присутствовать на элемент DOM.
  5. @View Декоратор или шаблон шаблона являются обязательными в компоненте.

Директива

  1. Для регистрации директив мы используем @Directive аннотацию метаданных.
  2. Директива используется для добавления поведения в существующий элемент DOM.
  3. Директива используется для разработки повторно используемых компонентов.
  4. Многие директивы могут использоваться для каждого элемента DOM.
  5. Директива не использует вид.

Источники:

http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html

22
задан Arnis Lapsa 17 October 2010 в 13:23
поделиться

3 ответа

Как указывает @Dennis, если значение модели равно null, оно будет использовать существующую модель из вида. Причина этого в том, чтобы поддерживать возможность вызова частичного представления с использованием подписи, которая содержит только частичное имя представления, и повторного использования существующей модели. Внутренне все помощники RenderPartial подчиняются одному методу RenderPartialInternal. Способ, которым вы получаете этот метод для повторного использования существующей модели, состоит в том, чтобы передать нулевое значение для модели (что делает подпись, которая принимает только имя представления). Когда вы передаете нулевое значение в подпись, содержащую и имя представления, и объект модели, вы по сути реплицируете поведение метода, который принимает только имя представления.

Это должно решить вашу проблему:

<% Html.RenderPartial( "_Bar", Model.Bar ?? string.Empty ) %>
35
ответ дан 29 November 2019 в 04:09
поделиться

Если вы передадите значение null в качестве модели для RenderPartial, тогда он будет смотреть на исходную модель, поэтому в сообщении об ошибке написано foo.

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

Edit: @Arnis, посмотрите исходный код. Это не вранье. Вы передаете null перегрузке RenderPartial. Вы не передаете Foo . Внутренне система использует модель из ViewContext вашей страницы (которая является Foo ), когда вы передаете нулевую Bar в RenderPartial.

4
ответ дан 29 November 2019 в 04:09
поделиться

Посмотрите на исходный код 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" ); %>
9
ответ дан 29 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: