当前位置: 首页 > 编程语言 > C#

如何处理query的很多可能值?share

时间:2023-04-10 21:54:11 C#

是如何处理很多可能的值来进行查询的呢?我正在构建一个MVC应用程序,用户可以在其中使用大量过滤器来获得他想要的东西。以下是基于控制器方法的过滤器概述:////GET:/Card/SearchIndexpublicActionResultSearchIndex(stringobjName,stringobjType,stringobjCostSymbol,stringobjCost,stringpowerSymbol,stringpowerValue,stringratingSymbol,stringratingValue,//此处有更多代码...}我想知道处理所有这些过滤器的最佳方法,以及如何根据给定的参数获取objInfo列表。请记住,某些值可能为空。到目前为止我所做的就是加载“所有”objInfo,然后通过删除我不需要的项目对它们进行排序,这对我来说似乎“不聪明”,但我是MVCApp的新手,我正在努力寻找a有更好的方法可以做到这一点。编辑这是生成数据的视图:@usingSystem.Web.Mvc.Html@modelPagedList.IPagedList@{ViewBag.Title="SearchIndex";}对象管理@Html.ActionLink("CreateNewObj","Create")@using(Html.BeginForm()){ObjColors:勾选一个框来搜索颜色。全部:@Html.CheckBox("allColor",true)蓝色:@Html.CheckBox("blueColor",true)红色:@Html.CheckBox("redColor",true)黄色:@Html.CheckBox("yellowColor",true)紫色:@Html.CheckBox("purpleColor",true)灰色:@Html.CheckBox("greyColor",true)黑色:@Html.CheckBox("blackColor",true)音乐:@Html.CheckBox("musicColor",true)Obj值:在下面的列表中选择一个值。对象编号:附加成本(包含):@Html.DropDownList("addCost",String.Empty)+@Html.DropDownList("addCost2",String.Empty)+@Html.DropDownList("addCost3",String.Empty)+@Html.DropDownList("addCost4",String.Empty)+@Html.DropDownList("addCost5",String.Empty)+@Html.DropDownList("addCost6",String.Empty)费用:@Html.DropDownList("objCostSymbol","=")@Html.DropDownList("objCost",String.Empty)功率:@Html.DropDownList("powerSymbol","=")@Html.DropDownList("powerValue",String.Empty)Rating:@Html.DropDownList("ratingSymbol","=")@Html.DropDownList("ratingValue",String.Empty)Obj文本:写一个名字,名字的一部分,或者一个词。对象名称:@Html.TextBox("objName")所有者:@Html.TextBox("ownerName")对象类别:在下面的列表中选择一个类别。类型:@Html.DropDownList("objType","All")对象集:@Html.DropDownList("objSet","All")稀有度:@Html.DropDownList("objRarity","All")}@ViewData["ErrorMessage"]ObjNameObjNumberObjColorAdditionalCostCostObjType@Html.ActionLink("Power","SearchIndex",new{sortOrder=ViewBag.PowerSortParm})@Html.ActionLink("Rating","SearchIndex",new{sortOrder=ViewBag.RatingSortParm})RarityObjSetNameOwnerName@foreach(variteminModel){@Html.DisplayFor(modelItem=>item.m_ObjName)}@Html.DisplayFor(modelItem=>item.m_ObjNumber)@Html.DisplayFor(modelItem=>item.m_ObjColor)@Html.DisplayFor(modelItem=>item.m_ObjAddCost)@Html.DisplayFor(modelItem=>item.m_ObjCost)@Html.DisplayFor(modelItem=>item.m_ObjType)@Html.DisplayFor(modelItem=>item.m_ObjPower)@Html.DisplayFor(modelItem=>item.m_ObjRating)@Html.DisplayFor(modelItem=>item.m_ObjRarity)@Html.DisplayFor(modelItem=>item.m_ObjSet.m_ObjSetName)@Html.DisplayFor(modelItem=>item.m_ObjOwner)@Html.ActionLink("编辑","编辑",new{id=item.m_ObjID})|@Html.ActionLink("细节","细节",new{id=item.m_ObjID})|@Html.ActionLink("Delete","Delete",new{id=item.m_ObjID})}页@(Model.PageCount>","SearchIndex",新{page=Model.PageCount,sortOrder=ViewBag.CurrentSort})}else{@:Next>@Html.Raw("")@:>>}任何建议都会帮助我做得更好,谢谢你通常在JavaScript中遇到这个问题吗?你会创建一个选项对象,如varop={car??dName:"..",cardType:"",...}并将其传递给函数。对吗?C#也一样。定义一个条件类,例如publicclassConditions{publicstringCardName{get;set;}publicstringCardType{get;set;}..}并将其传递给控制Type属性值的函数,以便相应地执行。为什么不使用ModelBinder。我认为它将对您的情况非常有用。请看下面:_我有一个模型:publicclassEmployee{publicstringId{get;放;}publicstringFirstName{get;放;}publicstringLastName{get;放;}publicDateTimeBirthDate{get;放;}publicAddressHomeAddress{get;放;}}和Employee的ModelBinder:publicclassEmployeeBinder:IModelBinder{publicobjectBindModel(ControllerContextcontrollerContext,ModelBindingContextbindingContext){varemp=newEmployee{Id=controllerContext.HttpContext.Request.Form["Id"],FirstName=controllerContext.HttpContext.Request.Form["FirstName"],LastName=controllerContext.HttpContext.Request.Form["LastName"],BirthDate=newDateTime(int.Parse(controllerContext.HttpContext.Request.Form["year"]),int.Parse(controllerContext.HttpContext.Request.Form["month"]),int.Parse(controllerContext.HttpContext.Request.Form["day"]))};返回emp;}}然后控制器:publicActionResultExample(Employeeemp){returnView(emp);}网址:http://localhost:1034/Home/Example?Id=1&LastName=lazycatit这是一种可以解决问题的方法首先,创建一个带有搜索参数的ViewModel。公共类FilterViewModel{公共字符串ObjName{得到;放;}publicstringObjType{get;放;}publicstringOtherType{get;放;在您的控制器中,将其传递给视图。publicvirtualActionResultSearchResults(){returnView(newFilterViewModel());在SearchResults.cshtml中,您需要将模型编码为json,然后使用ajax调用来过滤结果。假设有一个带有btnFilterResultsid的按钮。这将使用ajax从局部视图(应该是您的表)加载结果。最后,在您的控制器中,您可以获得结果:[HttpGet]publicvirtualActionResultLoadTableReporteGeneral(stringviewModel){varfilterOptions=JsonConvert.DeserializeObject(viewModel);varquery=fromtindb.YourTableNameselectt;//这将返回一个包含所有数据的IQueryable,还没有过滤。//开始过滤。if(!String.IsNullOrEmpty(filterOptions.ObjName)){query=query.Where(x=>x.ObjName==filterOptions.ObjName);}if(!String.IsNullOrEmpty(filterOptions.ObjType)){query=query.Where(x=>x.ObjType==filterOptions.ObjType);}//等等。//最后用你的表返回一个局部视图。returnPartialView(MVC.Shared.Views._YourTableName,query);注意:我使用的是T4MVC和Json.Net包。希望这可以帮助。以上就是C#学习教程:如何处理查询的很多可能值?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: