Razor WebPage: как сделать данные из базы данных доступными для нескольких страниц?

Мой вопрос очень похож на этот.

Я получаю одни и те же данные (атрибуты объектов, каждая строка представляет объект) из базы данных для двух моих страниц, одну страницу для редактирования данных и одну страницу для их просмотра. Чтобы уменьшить избыточный код и улучшить обслуживание, я хотел написать фрагмент кода, загружающий данные только один раз.

Моя идея состояла в том, чтобы использовать _PageStart.cshtml. Но при этом я могу хранить только строки в массиве PageData, но не объекты.

Итак, как лучше всего сделать строки из базы данных доступными на нескольких страницах?

Вот как я получаю данные из базы данных:

var db = Database.Open("mydb");
String query = "select * from motors";
var rows = db.Query(query);

System.Data.DataTable motors = new System.Data.DataTable();
motors.Columns.Add("posX", typeof(int));
motors.Columns.Add("posY", typeof(int));

IEnumerator<dynamic> en = rows.GetEnumerator();
while (en.MoveNext()) {
    motors.Rows.Add(en.Current.posX, en.Current.posY);
}

Я хотел бы получить доступ к DataTable motors на разных страницах.


person elementzero23    schedule 12.10.2016    source источник


Ответы (1)


Все, что вам нужно сделать, это создать страницу, на которой есть только ваш код. Затем на любой странице, которую вы хотите отобразить, просто используйте:

@RenderPage("~/yourpage.cshtml");
person James    schedule 14.10.2016
comment
Я попытался получить доступ к DataTable motors. Visual Studio (и сервер после того, как я запустил страницу) говорит Название «двигатели» не существует в текущем контексте. - person elementzero23; 17.10.2016
comment
Извините, вам также нужно поместить свой вывод на кодовую страницу, независимо от того, что вы хотите отображать несколько раз. Другой вариант, если вы хотите получить доступ только к частям данных, вы можете поместить запрос в начало кода на странице макета, а затем использовать его для вызова @Page.motors. Но вместо этого вам нужно назвать переменные двигатели как Page.motors. - person James; 18.10.2016
comment
Что вы имеете в виду под выводом? А не получается поставить код в yourpage.cshtml и обращаться к DataTable как-то так, как @yourpage.motors? - person elementzero23; 19.10.2016
comment
Могу ли я увидеть полный код страницы, на которой вы успешно отобразили свою таблицу данных? Тогда я смогу показать вам, что именно делать. - person James; 19.10.2016