我是ASP.NET MVC 2的新手,我需要一些关于用于这种情况的最佳“控件”的建议。 (我知道ASP.NET MVC并不真正使用服务器控件,但有许多附加组件,例如MVC Controls ToolKit)。
这就是我需要做的事情。我在数据库中有一个表,其中包含一系列测试。我需要能够在View中显示这些内容,并允许用户以某种方式选择它们(通过复选框或其他)。
然后我需要能够确定选择了哪些项目。
有人可以告诉我实现这个目标的最佳途径吗?
感谢任何帮助/评论。
TIA。
答案 0 :(得分:1)
如果您使用客户端功能,它最终将主要由两部分组成:
我创建了一个显示表格的局部视图。如果您需要重复使用,请将部分放在Views/Shared
文件夹
表的每个TR
都将具有该特定行中显示的对象的序列化JSON。序列化可以通过编写自定义对象扩展方法来完成,因此您可以在之后的任何对象上调用ToJson()
<tr data='<%= this.Model[0].ToJson()'>
<td class="actions"> <a href="#" class="action-select">Select</a> ... </td>
<td>...</td>
...
</tr>
请注意您需要提供的操作的额外列。
还添加一个提供客户端功能的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
对象将始终具有所选行(或更好地表示其对象),但您可以随意使用它。< / p>
为什么我将selection
设置为对象而不是数组?因为Javascript对象是一种关联数组,所以搜索特定元素比枚举它的元素更快,因为它是一个普通的数组。通过这种方式,我可以立即查看是否选择了行,还可以直接从中删除元素。
这样你就可以拥有一个可以放在各种页面上的可重用表格(因此与用户控件的相似之处)。但如果您需要在页面中添加其中几个表,则必须稍微调整它们,以便客户端功能不会在不同表之间混合数据。