这一点都不"错",只是酷家伙通常不会用MVC.顺便说一句,我希望ASP的一些早期演示.NETMVC并没有试图同时将Linq塞进Sql.它非常棒,非常适合MVC,当然,但它不是必需的.There is nothing about MVC that prevents you from using 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
}
视图:(w/模型强类型为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帮助程序隔离,这是您做事情的几种方式.
You absolutely are supposed to pass objects to the View,如果视图应该呈现它们的话.(关注点的分离决定了观点不应该对它们负责.)在本例中,我将DataTable作为实际的视图模型传递,但您也可以将其放入ViewData collection中.或者,您可以创建一个特定的IndexViewModel类,其中包含DataTable和其他对象,例如欢迎消息.
我希望这有帮助!