#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, если это так (как показано в ответе).