【问题标题】:ASP.NET MVC 2 - Control AdviceASP.NET MVC 2 - 控制建议
【发布时间】:2011-04-20 09:25:41
【问题描述】:

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

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

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

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

感谢任何帮助/cmets。

TIA。

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

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

    1. 可视化 HTML
    2. 功能性 Javascript

    我会怎么做

    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;
              }
      });
      

    这样,当您的行被选中时,它们将具有额外的 selected 类,并且您的 selection 对象将始终具有选定的行(或者更好地说是它们的对象),您可以随意使用。

    补充说明

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

    结果

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

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多