ASP.Net MVC — включение на стороне сервера при привязке к viewmodel

#asp.net #asp.net-mvc

#asp.net #asp.net-mvc

Вопрос:

Я только изучаю ASP.Платформа MVC Net, и поэтому мой вопрос, скорее всего, базовый. Но мне нужна помощь в повторном использовании веб-страниц при жесткой привязке к моделям просмотра.

Рассмотрим приложение, подобное следующему:

Экран 1: Найдите ближайшую библиотеку, введя свой уличный адрес. Библиотека отображается после поиска, страница была жестко привязана к модели представления библиотеки.

Экран 2: Выполните поиск вашей регистрационной информации по имени и дате рождения и включите в результаты ближайшую библиотеку в точно таком же формате, как на экране 1. На этом экране отображается больше информации, чем на экране 1, поскольку он привязан к модели представления регистрации, которая содержит модель представления библиотеки в качестве свойства.

Я хочу повторно использовать экран 1, по сути, выполняя «включение», чтобы весь мой HTML для экрана 1 не нужно было переписывать на экране 2.

Но как мне это сделать, когда обе они тесно связаны с разными моделями представления?

Я, вероятно, даже не ищу с правильным словарным запасом. Любые указания по соответствующей функциональности были бы оценены.

Ответ №1:

HTML, который будет использоваться как на экране 1, так и на экране 2, должен быть размещен внутри частичного представления. Частичные представления подобны пользовательским элементам управления, которые можно использовать на нескольких экранах.

Привяжите это частичное представление к модели представления библиотеки.

На вашем экране 2 вы можете отобразить частичное представление, используя следующий код:

<%: Html.RenderPartial('LibraryPartialView', Model.LibraryViewModel) %>

Здесь мы визуализируем частичное представление библиотеки на экране 2 и передаем ему объект модели представления библиотеки (который изначально содержится в модели представления регистрации; Здесь Model имеется в виду модель представления регистрации).

На экране 1 вам пришлось бы отобразить частичный вид библиотеки, используя тот же код.

Комментарии:

1. просто исправление к вышесказанному после работы с этим. Вместо <%: Html …. это должно быть <% Html….

Ответ №2:

Кроме того, вы также можете загрузить его с помощью ajax и jQuery. Что-то вроде

 <div id="libs">loading...</div>
$("#libs").load("/libraries/address/12-w-6-ave");
  

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

 @HTML.RenderAction("action", "controller", new {id=Model.Address})
  

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

Комментарии:

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

2. В этом случае используйте action, если данные не являются частью вашей модели, и partial, если это так (как показано в ответе).