【问题标题】:Best practice for sending Grid data in ASP.NET MVC 2 from View to Controller在 ASP.NET MVC 2 中将 Grid 数据从 View 发送到 Controller 的最佳实践
【发布时间】:2010-08-12 23:02:09
【问题描述】:

我是 ASP.NET MVC 2 的新手,想知道将“网格数据”从视图发送到控制器的最简单和/或最佳做法是什么。将此“网格数据”视为一个 Excel 电子表格,其中某些列将包含一些数据,而某些行将包含一些数据。在控制器中,我不仅需要知道哪些列和行包含数据,还需要知道它包含的具体数据。我希望在控制器类中有一个“网格对象”,我可以循环通过它来收集必要的数据,但我对其他选项持开放态度。

显然,这可能不是捕获此类数据的最简单方法,但试想一下,这是允许您从用户那里获取此输入的唯一方法。

另外,我正在使用 VS.NET 2010、ASP.NET 4.0、C# 4.0,所以我考虑过不使用 ASP.NET MVC 2 并使用 ASP.NET Web 表单,因为看起来这个解决方案在 Web 中会更容易形式。我唯一担心的是网站的其他方面在 MVC 中会更容易,这似乎是目前使用 MVC 的唯一问题。

谢谢, 保罗

【问题讨论】:

  • 在同一个项目中使用这两种技术没有任何阻碍。

标签: c# asp.net asp.net-mvc-2


【解决方案1】:

这在很大程度上取决于您如何弄脏桌子。但这里有一个非常简单的示例:

1 - 把你的洞表放在一个表格中;

2 - 用“坐标”标识每个数据单元格的字段

像这样:

<%: using(form = html.Form("UpdateGrid")) { %>
    <table>
<%     for (int r = 0; r < rowCount; r++) { %>
        <tr>
<%         for (int c = 0; c < columnCount; c++) { %>
            <td><%: html.TextBox(string.format("cell_{0}_{1}",r,c)) %></td>
<%         } %>
        </tr>
<%     } %>
    </table>
<% } %>

这只是一个示例代码(我不确定它是否会按原样工作),但它会给你一个想法。 如果你想要一个类似 Excel 的地址,你可以使用这个:

            <td><%: html.TextBox(string.format("{1}{0}",(char)(r + 'A'),c  + 1)) %></td>

要从控制器访问表格信息,您可以使用以下锥体:

public ActionResult UpdateGrid(FormCollection form) {
    // ... Some initialization
    for (int r = 0; r < rowCount; r++ ) {
        for (int c = 0; c < columnCount; c++ ) {
            var cellValue = form[string.format("{1}{0}",(char)(r + 'A'),c  + 1)]; // Excell like format
            // Add your manipulation here;
        }
    }
    // ... Continue your controller implementation
}

【讨论】:

  • 我并不担心如何在视图上创建代码,因为我关心的是如何访问控制器中的表。我可能会为视图使用像 SlickGrid 这样的 jQuery Grid,但我很好奇如何将这些数据发送到控制器(可能是 Ajax 化发送而不是完整的回传)。所以我真正需要帮助的两件事是: 1. 我如何从视图发送网格数据(你稍微触摸一下)。 2.我如何访问发送的数据,我的控制器方法签名是什么样的,我的控制器访问网格代码是什么样的?
  • 这非常有帮助,因为您的回复如此之快,我讨厌继续在我原来的问题中添加更多“要求”/“问题”,但知道如何使用 jQuery 网格来做到这一点吗?我在 jQuery 网格上查看源代码,但没有看到正在生成的表,所以我假设我必须在 jQuery 端填写一些 JSON 对象并将其发布到控制器方法。对使用标准的 jQuery 网格(如 SlickGrid)而不是本土的网格来做这件事有什么想法吗?
  • 我正在查看 SlickGrid 代码来给您答案……但它可能不会那么快。给我几个小时......同时不要忘记投票赞成或反对这个答案。
  • 我很想给你的答案投票,但我没有最低要求的“代表”来投票。但是,一旦我得到它,我会很乐意这样做......现在去寻找我可以回答的问题以增加我的代表。 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
相关资源
最近更新 更多