2009-08-30 1 views

ответ

5

Вы можете вернуть все, что захотите, при условии, что он может быть сохранен (сериализован) в ViewData. В ASP.NET MVC нет ничего «волшебного», который сдерживает значения и/или типы.

Если вы хотите перебрать DataTable в представлении, поместите его в ViewData в контроллер, извлеките его в представлении и проведите по нему, как и в любом другом месте.

DataTable is serializable.

Так что-то подобное должно работать:

<% 
var tbl = ViewData["MyDataTable"]; 

foreach (DataRow row in tbl.Rows) 
{ 
    foreach (DataColumn col in tbl.Columns) 
    { 
    Response.Write(row[col] as string ?? string.Empty); 
    } 
} 
%> 
+6

Это хорошо для ответа на его вопрос, но я не рекомендую передавать DataTables (или Entities) в представление, потому что он плотно соединяет представление с технологией, используемой для получения данных из базы данных. На мой взгляд, лучше использовать объекты POCO. – 7wp

+1

Он не называется ViewState в MVC, он называется ViewData. И я согласен с Роберто, вы должны передавать объекты, которые содержат данные, которые вам нужны, с вашего контроллера на ваш взгляд. Не пропускайте только DataTable. – BFree

+0

Да. Типично с моей стороны. И я согласен с Роберто. Я сражался с более старым унаследованным приложением, и Viewstate на мой взгляд. Исправление кода/комментария сейчас. – andymeadows

2

Если я правильно понимаю ваш вопрос, просто потому, что вы используете MVC вы не должны использовать рамки Entity для взаимодействия с базой данных.

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

Ваш взгляд просто должен знать, как проходить через ваш объект, который вы передаете ему.

Однако я рекомендую использовать объекты POCO для перехода к вашему представлению, чтобы вы не привязывали данные своего вида к технологии, используемой для извлечения информации из базы данных.

+0

Что это за объект POCO? Обычный объект CLR? ОК, но тогда мне интересно, как сделать datatable в объект POCO – Josh

+0

Привет, Johsh. Вы правы POCO = Обычный объект CLR. Вам не нужно «делать» вашу базу данных в POCO. Вы можете использовать любой способ получить ваши данные, такие как DataTable или даже Entity Framework. Но после получения данных вы переводите их в свой собственный объект POCO. Подумайте о том, что ваш объект POCO является «транспортным средством» для ваших данных. Затем ваш взгляд может быть тесно связан с этим, поэтому не будет слишком сложно изменить уровень доступа к данным, не перекодируя целую кучу Views. – 7wp

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

  • Нет связанных вопросов^_^