ASP.NET MVC 2 - 控制建议

时间:2011-04-20 09:25:41

标签: asp.net-mvc-2

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

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

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

有人可以告诉我实现这个目标的最佳途径吗?

感谢任何帮助/评论。

TIA。

1 个答案:

答案 0 :(得分:1)

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

  1. 可视化HTML
  2. 功能性Javascript
  3. 我将如何做?

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

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

      <tr data='<%= this.Model[0].ToJson()'>
          <td class="actions"> <a href="#" class="action-select">Select</a> ... </td>
          <td>...</td>
          ...
      </tr>
      

      请注意您需要提供的操作的额外列。

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

      $(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;
              }
      });
      
    4. 这样,当您选择行时,您的行将有额外的selected类,而您的selection对象将始终具有所选行(或更好地表示其对象),但您可以随意使用它。< / p>

      附加说明

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

      结果

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