Это вовсе не «неправильно», это просто не то, что классные парни обычно делают с MVC. Кроме того, я хотел бы, чтобы некоторые ранние демонстрации ASP.NET MVC не пытались втиснуть Linq-to-Sql одновременно. Конечно, это очень круто и хорошо подходит для MVC, но это не обязательно. В MVC нет ничего, что мешало бы вам использовать ADO.NET . Например:
Действие контроллера:
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
DataTable dt = new DataTable("MyTable");
dt.Columns.Add(new DataColumn("Col1", typeof(string)));
dt.Columns.Add(new DataColumn("Col2", typeof(string)));
dt.Columns.Add(new DataColumn("Col3", typeof(string)));
for (int i = 0; i < 3; i++)
{
DataRow row = dt.NewRow();
row["Col1"] = "col 1, row " + i;
row["Col2"] = "col 2, row " + i;
row["Col3"] = "col 3, row " + i;
dt.Rows.Add(row);
}
return View(dt); //passing the DataTable as my Model
}
Вид: (с моделью, строго типизированной как System.Data.DataTable)
<table border="1">
<thead>
<tr>
<%foreach (System.Data.DataColumn col in Model.Columns) { %>
<th><%=col.Caption %></th>
<%} %>
</tr>
</thead>
<tbody>
<% foreach(System.Data.DataRow row in Model.Rows) { %>
<tr>
<% foreach (var cell in row.ItemArray) {%>
<td><%=cell.ToString() %></td>
<%} %>
</tr>
<%} %>
</tbody>
</table>
Теперь я нарушаю целый ряд принципов и «лучших практик» ASP.NET MVC здесь, поэтому, пожалуйста, поймите, что это просто простая демонстрация. Код, создающий DataTable, должен находиться где-то за пределами контроллера, и код в представлении может быть лучше изолирован для частичного или html-помощника, чтобы назвать несколько способов, которыми вы должны сделать что-то.
Вы должны передавать объекты в представление , если представление должно их представлять. (Разделение интересов диктует, что представление не должно отвечать за их создание .) В этом случае я передал DataTable как фактическую модель представления, но вы могли бы с тем же успехом поместить его в коллекцию ViewData. В качестве альтернативы вы можете создать определенный класс IndexViewModel, содержащий DataTable и другие объекты, такие как приветственное сообщение.
Надеюсь, это поможет!