Можно ли вложить частичные виды? - PullRequest
5 голосов
/ 25 февраля 2012

Мне известен этот вопрос , но оригинальный плакат принял решение, которое не включало в себя вложение.Я определенно хочу вложить частичные представления (если, конечно, нет лучшего способа.)

У меня есть страница, которая может Ajax-загрузить одно из нескольких частичных представлений, в зависимости от действий пользователя в главном представлении.(Представления являются частичными, потому что я понимаю, что если вы хотите загрузить значительный дополнительный контент из вызова Ajax, вам необходимо вернуть PartialViewResult из вашего вызова.) Несколько частичных представлений имеют один общий элемент, раскрывающийся список, который я быхотелось бы выделить его частичное представление.

Но это не работает.Каждое мое частичное представление имеет связанную модель представления, которая является их моделью.Для вложенного частичного представления я хотел бы передать значение одного поля, обнуляемого типа int, из модели представления родительского представления в качестве модели для вложенного частичного представления.

Но во время выполнения я получаю сообщение о том, что моему частичному представлению требуется Nullable , но получено X, где X - тип модели представления, связанной с родительским частичным представлением.

Таким образом, мой вопрос состоит из двух частей:

  1. Разве вложение частичных представлений просто не допускается?(В таком случае я хотел бы, чтобы инфраструктура проверила ситуацию и выдавала ошибку, которая говорит об этом явно.)

  2. Есть ли способ получить желаемый эффект факторизованногоиз общего элемента интерфейса, кроме как с частичным представлением?Я рассмотрел, но не пытался создать шаблон редактирования, потому что полагал, что то, что не будет работать для частичных представлений, не будет работать для них, но я могу ошибаться.

ETA: я обнаружил свою проблему: когда вы передаете нулевое значение для модели в HtmlHelper.Partial или RenderPartial, механизм рендеринга заменяет модель вызывающего частичного представления вместо этого нулевого, предполагая, что вы просто не пропустили модель,

Что не так в моем случае: мой Nullable является Nullable, потому что, пока он не установлен, он является нулевым!Нуль семантически значим!

Но именно поэтому у меня возникла проблема.

Ответы [ 3 ]

4 голосов
/ 25 февраля 2012

Да, вы можете вкладывать частичные виды.Просто убедитесь, что вы передаете правильную модель.Здесь полезны HtmlHelpers, поскольку вы можете инкапсулировать вызов RenderPartial с полным путем просмотра и убедиться, что используется правильная модель.

пример

public static void RenderSomePartial(this HtmlHelper helper, int? i)
{
    helper.RenderPartial("~/Views/Shared/SomePartial.cshtml", i);
}
1 голос
/ 25 февраля 2012

Да, вы можете.Это может стать немного грязным, если вам нужно обойтись без моделей.Если вы используете строго типизированные модели, попробуйте использовать DisplayTemplates или EditorTemplates вместо частичных.

0 голосов
/ 25 февраля 2012

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

...