2014-09-08 2 views
4

Я понимаю, что когда я создаю представление, я не должен помещать туда какой-либо код помимо html и данных из модели/контроллера, что я и сделал до сих пор.Создание частичного представления с динамическим контентом

Но давайте скажем, что есть фрагмент динамически сгенерированного html, который можно использовать в нескольких представлениях, я предполагаю, что это будет частичное представление, которое входит в общую папку в проекте. Но поскольку это частичное представление, у которого нет абсолютного контроллера для обработки его распространения динамических данных (от db), как бы я мог позвонить, и где бы я кодировал распространение данных из db в представление (или модель?), если разрешить частичное представление для динамического рендеринга контента для table.id=n и т. д.

Я довольно к новому и работаю над учебником в .net, пытаясь понять, как это сделать. Кто-нибудь знает, как это делается? Надеюсь, что вопрос имеет смысл.

+0

Вы можете передать модель частичной, так что это ничем не отличается от того, как вы сделали это в своем представлении. – MikeSmithDev

+0

Где я могу распространять эту модель, но не имеет контроллера для распространения данных из db –

+0

От контроллера, который создал модель для вашего вида. – MikeSmithDev

ответ

0

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

Синтаксис выглядит так:

@helper FormatDate(DateTime date) 
{ 
    @date.ToShortDateString() 
} 

Вы называете это так (при условии, что файл Utility.cshtml)

@Utility.FormatDate(Patient.DOB) 

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

+0

Да, я использую бритву, но у меня нет папки App_Code, однако я вижу папку App_Data, которая в настоящее время пуста, не так ли? –

+0

Создайте папку App_Code. –

+0

Хм, хорошо. Итак, этот пример, который вы предоставили, представляет собой частичный вид или что-то еще? –

1

Вы всегда можете определить модель для частичного.

И вы можете сделать парциальное с точкой зрения контейнера пропускания динамически населенной экземпляр своей модели:

<!-- index.cshtml --> 
<h1>Feed Upload</h1> 
<div id="uploader"> 
     @Html.Partial("~/Views/Shared/Controls/_FileUploader.cshtml", new FileUploaderModel() { UploaderClassName = this.Model.UploaderClassName }) 
</div> 

В этом простом примере я называю частичную _FileUploader.cshtml из index.cshtml с использованием методы @Html.Partial(), передавая новую экземпляр модели, который указывает значение UploaderClassName.

Редактировать

this.Model.UploaderClassName относится к контейнер «ы модели, и она инициализируется внутри контейнера в » ы контроллера бизнеса. Конечно, контроллер может запускать любую логику доступа к данным для захвата динамических данных из db и передачи их в модель части.

Посмотрите на MSDN и на this article.

+0

Значит, вы делаете распространение данных модели из db в самой модели без использования какого-либо контроллера? –

0

Недавно я опубликовал пакет nuget, чтобы сделать это. Он называется Dynamic MVC.

http://dynamicmvc.com

Вы можете посмотреть на исходный код на CodePlex.

https://dynamicmvc.codeplex.com

То, как я сделал это, чтобы использовать двигатель ModelMetadata встроенный в MVC, чтобы позволить мне получить значение для любого свойства в слабо типизированной моде.Механизм ModelMetadata изначально был получен из динамических данных ASP.net и перенесен на MVC в MVC2. Он отлично работает для такого рода ситуаций.

Смежные вопросы