在 MVC 中显示标准数据表

2023-12-10

也许这是完全错误的,但在 Webform 时代,您将返回一个数据集,然后将其绑定到网格。但现在在 MVC 中,您不应该传递数据表,因为您无法序列化它,并且从技术上讲,它是将对象传递到不属于它的视图中?但是我到底要如何在视图上显示数据呢?!我无法在这里使用 LINQ to SQL 类,因为这是纯内存数据结构。

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

读完之后我真的有点不知所措文章来自《顾》我只能总结说我必须传回一个 ViewData 对象?我在这里疯了吗?

来自布莱蒂的欢呼

Jon


这根本不是“错误”,只是这不是酷人通常使用 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 类。

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MVC 中显示标准数据表 的相关文章

随机推荐

  • 在 Android KitKat 上隐藏导航栏后显示导航栏

    在我的应用程序中 我想让用户隐藏或显示导航栏 后退 主页 菜单 系统栏 电池 wifi 通知 应始终隐藏 我用以下代码隐藏系统栏 getWindow setFlags WindowManager LayoutParams FLAG FULL
  • JQuery3.0 抛出错误设置只有 getter firefox 的属性

    我动态创建了 SVG 圆圈 并使用 JQuery 将其小圆圈动画化为大圆圈 动画在其他 JQuery 版本中工作正常并抛出异常 设置一个只有 getter 的属性 仅适用于 JQuery 3 0 版本 我在网上搜了一下 这是由于属性没有se
  • htaccess - 在一台共享服务器上托管多个域,

    我有一个 site1 com 作为我的主站点 我在根目录 site1 和 site2 中创建了两个文件夹 我使用 Htaccess 将 site1 com 的流量重定向到文件夹 site1 Site2 也可以使用目录 site2 作为 si
  • 如何在 ios 中打开日历 .ics 文件?

    我正在尝试在我的应用程序中下载并打开 ics 文件 我发现了一些问题 这是我正在使用的一些代码 NSString path NSBundle mainBundle pathForResource http www nmsd wednet e
  • VSCode 终端 + Git Bash 对于任何命令都“找不到命令”

    我的settings json非常简单 它用sh exe 来自git 替换cmd exe terminal integrated shell windows C Program Files x86 Git bin sh exe 打开外壳后
  • 如何对 firebase 中的多个值求和

    我也是 Android 编程新手firebase 首先看图片 详情图片 在那里我想得到所有 成本 部分的总计 总和 我已经创建了这样的参考 DatabaseReference databaseBazars firebaseDatabase
  • -Dcucumber.options 在 mvn 测试中被忽略

    我正在使用 mvn test 来运行黄瓜测试 但是当我尝试在命令行上传递选项时 Dcucumber options 选项将被忽略 并使用运行程序类中 CucumberOptions 中指定的选项 例如 如果我只是尝试显示黄瓜帮助 它会忽略它
  • 是否可以使用 Tkinter 创建适用于 Android 或 iOS 的应用程序? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在尝试创建一个应用程序 tkinter 确实很有帮助 只是想确认 Tkinter 是否会成功引导我找到适用于 IOS 或 Android 的应用程序 不幸的是 Tkinter
  • 使用 jquery.validate.js 插件进行条件表单验证

    谁能告诉我如何编写一条规则来验证用户是否没有选择 填充单选按钮选项或 可选 文本字段 如果没有复选框选项 该规则应该只给出一条消息 myradiogroup被选择并且文本字段 email2是空的 我的表单代码
  • 无法在 C# 中解析 Oracle 时间戳

    我有 Oracle 的时间戳 string timestamp 23 JUN 14 09 39 04 000000000 AM 我无法将其解析为系统日期时间对象 我用了 CultureInfo provider CultureInfo In
  • 尝试在一个头文件中使用另一个头文件中的类

    我有一个weightedDirectedGraph类和一个vertex类在他们自己的头文件中 weightedDirectedGraph h 就是这个 ifndef GRAPH define GRAPH include
  • JavaFX:显示简单消息的最佳方式是什么?

    在我的应用程序中 我需要显示警告 信息消息 但我不知道一种简单的方法来做到这一点 因为 JavaFX 上没有 JOptionPane 或类似的组件 有一个 Popup 类 但是您必须设置许多参数才能为简单的消息获得合适的布局 位置 背景颜色
  • iOS:以编程方式在 UITextView 中上下左右移动光标

    我使用以下代码将光标位置移动到距离开头 5 个字符UITextField txtView selectedRange NSMakeRange 5 0 现在 如果我的光标位于任意位置 如下图所示 如何上下左右移动光标 向左和向右应该或多或少容
  • Azure 数据工厂 CI npm 验证步骤突然崩溃

    我们一直在使用 Azure 数据工厂的 新 CI CD 设置 如文档页面所述 https learn microsoft com en us azure data factory continuous integration deliver
  • 如何使用 iOS 5.1 打开首选项/设置?

    看起来 iOS 5 1 已经破坏了用于将用户导航到首选项的标准 URL 编码 例如 UIApplication sharedApplication openURL NSURL URLWithString prefs root TWITTER
  • 特定时间段内的平均值

    我在 python 中有一个来自 h5 文件的相当大的表 表的开头看起来有点像这样 table WIND REL DIRECTION deg WIND SPEED kts 735381 370833 0 0 000000 735381 37
  • 将数据传递给Python中的另一个类

    我正在使用 Twisted 并有几个回调 它们都是不同类型的 因此它们不共享工厂 我正在尝试将数据从一个回调对象获取到另一个回调对象 class CallbackA object def transmit self data self se
  • 在拖动发生时更改 android 中的dragshadow

    面临让dragshaddow 由创建的拖动阴影生成器 在拖动时对某些东西做出反应 有人知道应该如何做吗 这是我的自定义拖动阴影生成器的完整代码 自定义拖动阴影的要点 然而 正如其他人所说 不可能使用 API 11 中引入的本机功能来修改拖动
  • 使用RAWINPUT区分左右Shift键

    RAWINPUT 提供两个标志 RI KEY E0 and RI KEY E1 来检查是否按下了左键或右键 这对于 CTRL 非常有用 但对于左移和右移则不适用 事实上 两者的标志是相同的 VKey 也相同 VK SHIFT 我怎样才能知道
  • 在 MVC 中显示标准数据表

    也许这是完全错误的 但在 Webform 时代 您将返回一个数据集 然后将其绑定到网格 但现在在 MVC 中 您不应该传递数据表 因为您无法序列化它 并且从技术上讲 它是将对象传递到不属于它的视图中 但是我到底要如何在视图上显示数据呢 我无