这根本不是“错误”,只是这不是酷人通常使用 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 帮助程序,仅举几种方式should做事。
你绝对应该将对象传递给视图,如果视图应该呈现它们。 (关注点分离规定视图不应该负责creating)在本例中,我将 DataTable 作为实际视图模型传递,但您也可以将其放入 ViewData 集合中。或者,您可以创建一个包含 DataTable 和其他对象(例如欢迎消息)的特定 IndexViewModel 类。
我希望这有帮助!