在asp.net MVC中使用jQuery和AJAX自动填充选择框
1-问题:我需要让用户从大量信息中选择一个或多个东西,这些信息被分组为分层结构以供选择,数据输入,数据可以具有4个5个父类别的深度。
我正在寻找2种function:与eBay类似,在选择项目类别时显示级联列表。 显示页面时,您只能获得第一个列表框。 在第一个中选择一个之后,显示第二个。 该过程将继续,直到所选类别没有子类别。
}
3实际表和查询:表:
-int Id
-string名称
-int ParentId
查询:
public IList listcategories(int parentId) { var query = from c in categorytable where c.ParentId == parentId select c; var result= query.ToList(); return result; }
4-I我不知道如何开始,任何指南,现场示例jsfiddle,演示或教程将不胜感激。 brgds
更新:我相信这个function在webtutorials和问题中并不是很发达。 因此,我得到了一个很好的答案的赏金。 我将把赏金作为之前评论的function的实例。 谢谢!
我正在使用knockout和Webapi为我正在开发的应用程序中的级联下拉菜单提供动力。
查看我有一个如下所示的基本下拉列表。
查看模型
self.CurrentList = ko.observableArray(CurrentListData); self.CurrentListSelectedItem = ko.observable(); self.CurrentListSelectedItem.subscribe(function () { //ajaxcall to populate list 2 });
服务器端我有一个简单的rest服务,它在树中获取一个点的Id并返回它的所有子节点,这样你就可以将所有这些下拉列表链接在一起(只要你的层次结构具有级别)匹配。
查看使用模拟数据的工作示例的小提琴http://jsfiddle.net/tgriley1/vEBGS/
通过处理大量数据我学到的是:
- 不要尝试一次性加载所有数据到客户端
- 仅加载客户端实际需要的数据
- 在数据库中进行过滤,搜索和排序,例如通过存储过程。 特别是对于分布在多个表中的数据。
- 优化您的数据库查询,索引很好
- 始终牢记您期望有多少同步查询
- linq很好但在处理大数据时并不适合所有事情
- 花时间思考和规划真正需要的数据
为了在您的网页上显示数据,有许多jQuery插件可以列出数据,您可以将函数绑定到“选定”的事件。 例如knockOut.js,它带有MVC4。 您可能不需要完全加载的jQuery“hierachical-data-list-display”-plugin。 也许你可以通过使用“seleted”-events,ajax加载和显示/隐藏function来实现它。
根据你的评论,我会想到jQuery和MVC的结合:
-
在MVC中我会创建一个类似的空间视图
@model MvcApplication.Models.DataModel
- @for (var i = 0; Model.Data.Count > i; i++) {
- @Model.Data[i].ItemName }
-
javascript可能是这样的:
function itemSelected(selectedItemId, itemCategoryLevel) { // ajax call to an action which loads the next categorie items into the partial view and returns them // on success remove all lists with an category - level lower than itemCategoryLevel // append the returned List to the HTML-container which holds the lists }
- 在调用的MVC-Action中,我将确定它是否是最后一个类别级别。 如果它是最后一个级别,我将返回与其他onclick事件绑定不同的局部视图
在我开始搜索一些插件之前,我会尝试实现这一点
我最近在使用Cascading Drop-down时遇到了类似的问题,我做了类似的事情。
首先,在视图上写一些jquery,这样当你选择第一个项时,它会向服务器发送一个ajax请求,并带回一个JSON或xml响应。
我做了类似的事情
在控制器上,类似于
Public JsonResult GetChildItems(int ParentId) { //code to retrieve the data JsonResult result = new JsonResult(); result.Data = **object that contains the child data**; return result; }
我自己是初学者,所以我不确定这段代码有多好,但是在使用jquery创建级联下拉列表时它对我有用。
希望能帮助到你。
链接到级联下拉问题: 使用JSON结果填充下拉列表 – 使用MVC3,JQuery,Ajax,JSON级联DropDown
嗨我有相同的场景,我使用的是,带有Web API的自动完成列表,在特定数量的字符后,它调用Web API并加载特定外卡的数据。 除此之外,当我发现返回的数据仍然很大时,我在SQL server端添加了分页
telerik演示总是学习MVC的好地方
http://demos.telerik.com/aspnet-mvc/razor/combobox/cascadingcombobox
根据您的屏幕截图,这并不完全使用列表框,但可以很容易地将其更改为使用它们。 通过一些javascript修改,您可以拥有无限级别。
这是另一个: