筛选只能通过ASP.NET MVC中的javascript进行筛选的数据库记录列表的最佳方法是什么
What is the best way to filter a list of database records that can only be filtered through javascript in ASP.NET MVC
问题:
假设我在ASP.NET MVC Web应用程序中有一个数据库记录列表。根据只能通过Javascript筛选的标准筛选此列表的最佳方法是什么?
如果我的问题不清楚,请看下面的例子。
示例:
我有一个控制器操作,它返回数据库中的所有或部分餐厅,在它的视图中,我显示了所有这些餐厅:
public ActionResult Index()
{
return View(restaurantRepository.GetAll());
}
现在每个餐厅都有一个服务边界,它是一个多边形,我通过以下模型属性将这个多边形存储在数据库中:
public class Restaurant
{
// Other properties omitted...
public ICollection<Coordinate> Coordinates { get; set; }
}
CCD_ 1基本上是表示多边形的纬度/经度对象的集合。
现在我想要的功能是,如果我在地图中给Index
动作一个点(纬度/经度),那么Index
动作应该只返回在其服务边界(多边形)中包含该点的餐厅。
现在显然我不能在控制器中进行过滤,因为绘制多边形并检查其中是否存在点只能通过Google Maps API和Javascript完成
编辑:多亏了@amg-argh的建议,我搜索了一下,看看是否可以只使用C/C#检查一个点是否在多边形内,我找到了这篇有效的帖子。然而,我的问题仍然存在。
通过Javascript实现这种过滤的最佳方式是什么?
我自己的想法:
我想到的是
- 首先让所有的餐馆都回到视野中
然后在视图中,我用反序列化我的模型
var model = @Html.Raw(@JsonConvert.SerializeObject(Model, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
然后用forEach迭代我的模型,提取满足该标准的约束。
model.forEach(function(restaurant){ if(checkBoundaries(restaurant, latLng)) { // Valid restaurant. Save the id in an array. } else { // Invalid restaurant. discard it. } });
然后将带有AJAX post请求的有效餐厅数组发送到控制器动作,控制器动作返回给定餐厅Id的餐厅。
但这些似乎都是一项艰巨的工作,也是一种糟糕的做法。有什么想法吗?
这个问题实际上可能适用于另一个stackexchange站点,因为它更多地是关于程序设计而不是实际实现。然而,要在前端而不是后端实现这一点。
- 通过
Index
方法加载视图,该视图实际上应该只包含视图所需的存根HTML和基本元素。想想页眉、页脚、标题等(可能还有前端模板) - 使用WebApi通过AJAX加载您的餐厅列表。因此,将
return View(restaurantRepository.GetAll());
移动到web api中,并执行类似return Ok(restaurantRespostory.GetAll())
的操作 - 遍历结果,当
if(checkBoundaries(restaurant, latLng))
通过时,使用JavaScript将HTML元素/标记添加到地图/您试图在视图中显示的任何视图。当它失败时,忽略它,什么都不做
这基本上就是你想要做的,并且会为你节省一次回发和第二次往返服务器的时间。
尽管我也建议进行一些其他更改
- 使用前端MVVM/MVC框架(angularjs、react、knocket等),通过JavaScript呈现结果。过滤您的数组,并使用类似
myViewVariable.inBoundryRestraunts = model.filter(function(r){ return checkBoundaries(r, latLng);})
的方法将其绑定到视图。这样做要比动态创建一堆HTMLElement整洁得多 - 找到某种方法(不需要完美)来限制后端的结果。虽然我不知道你申请的具体细节,但我可以想象,一个中等规模的城市将有数千家甚至数万家餐馆。下载所有这些数据以便在前端进行处理将花费很长时间
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 如何通过php页面将数据库值检索到jquery自动完成框中
- 使用javascript从数据库中添加表
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- 如何使用 Angular JS 将数据保存在数据库中
- 使用AngularJS中的筛选器更新给定的表
- 淘汰搜索/筛选
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- 在谷歌地图上绘制位置数据库
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- Angular JS Filter-通过3个复选框进行筛选
- 将地理编码结果转换为php变量以发布到mysql数据库
- 从数据库中检索字段,而不模拟它们
- 筛选只能通过ASP.NET MVC中的javascript进行筛选的数据库记录列表的最佳方法是什么
- 筛选从数据库创建的表
- 筛选我的数据库并更新下一个下拉框的下拉框
- 如何筛选数据库中的行
- 数据库支持的输入字段的代理筛选器值