在MVC中显示标准数据表

也许这完全是错误的,但是在Webforms时代,您将返回一个数据集,然后将其绑定到网格。但是现在在MVC中,您不应该传递数据表,因为您无法序列化它,并且从技术上讲,它是将对象传递到不属于它的View中?但是我到底打算在视图上显示数据吗?我在这里不能使用LINQ

to SQL类,因为这是纯内存数据结构。

理想情况下,我只想拥有一个可以在视图中迭代的对象。

我确实有点茫然,我已经阅读了“

Gu”中的文章,而我只能总结一下,我必须传回一个ViewData对象。我要疯了吗?

Blighty的欢呼声

乔恩

回答:

这根本不是“错误”,这不是酷人通常对MVC所做的事情。顺便说一句,我希望ASP.NET MVC的一些早期演示不要同时尝试在Linq-to-

Sql中进行。当然,它非常棒,非常适合MVC,但这不是必需的。 。例如:

控制器动作:

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的代码应该驻留在控制器之外的某个位置,并且View中的代码可能更好地隔离到部分(或html)助手中,以列举一些您

应该 做的事情。

,则 。(关注点的分离规定了视图不应该负责 创建

它们。)在这种情况下,我将DataTable传递为实际的视图模型,但您也可以将其放入ViewData集合中。或者,您可以制作一个特定的IndexViewModel类,其中包含DataTable和其他对象,例如欢迎消息。

我希望这有帮助!

以上是 在MVC中显示标准数据表 的全部内容, 来源链接: utcz.com/qa/416538.html

回到顶部