关于 ASP.NET MVC 2:ASP.NET MVC 2 – 控制建议

ASP.NET MVC 2 - Control Advice

我是 ASP.NET MVC 2 的新手,我需要一些关于在这种情况下使用的最佳"控制"的建议。 (我知道 ASP.NET MVC 并没有真正使用服务器控件,但是有许多附加组件,例如 MVC Controls ToolKit)。

这是我需要做的。我在数据库中有一个表,其中包含测试列表。我需要能够在视图中显示这些,并允许用户以某种方式(通过复选框或其他方式)选择它们。

然后我需要能够确定选择了哪些项目。

谁能告诉我实现这一目标的最佳方法?

感谢任何帮助/评论。

TIA.


如果你使用客户端功能,它最终将主要由两部分组成:

  • 可视化 HTML
  • 函数式 Javascript
  • 我会怎么做

  • 我会创建一个显示表格的局部视图。如果您需要重用它,请将部分放在 Views/Shared 文件夹

  • 表的每个 TR 都将序列化显示在该特定行中的对象的 JSON。序列化可以通过编写自定义对象扩展方法来完成,因此您可以在之后对任何对象调用 ToJson()

    1
    2
    3
    4
    5
    <tr data='<%= this.Model[0].ToJson()'>
        <td class="actions"> Select ... </td>
        <td>...</td>
        ...
    </tr>

    请注意额外的列,其中包含您需要提供的操作。

  • 还添加一个可以提供客户端功能的 Javascript(重要:此脚本使用 jQuery)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $(function(){
        var selection = {};
        $(".actions a.action-select").click(function(evt){
            evt.preventDefault();
            var context = $(this);
            var rowObj = $.parseJSON(context.closest("tr[data]").toggleClass("selected").attr("data"));

            if (selection[rowObj.Id])
            {
                // deselect
                delete selection[rowObj.Id];
            }
            else
            {
                // select
                selection[rowObj.Id] = rowObj;
            }
    });
  • 这样,当您的行被选中时,它们将具有额外的 selected 类,并且您的 selection 对象将始终具有选定的行(或者更好地说是它们的对象),您可以随心所欲地使用它们。

    附加说明

    为什么我将 selection 设置为对象而不是数组?因为 Javascript 对象是一种关联数组,所以搜索特定元素比枚举其元素更快,它是一个普通数组。这样我可以立即查看是否选择了行,并直接从中删除一个元素。

    结果

    这样,您将拥有一个可重复使用的表格,您可以将其放在不同的页面上(因此与用户控件相似)。但如果您需要将其中几个表添加到您的页面中,则必须稍微调整它们,以便客户端功能不会在不同表之间混合数据。