Javascript MVC5中如何基于静态dropdownlist过滤数据库记录
我想使用静态html DropdOnlist根据数据库列QtyRecieved、QtyRecieved和Void筛选数据库记录 QtyRecieved,QtyRecieved为十进制,void为布尔值 这是我试过的Javascript MVC5中如何基于静态dropdownlist过滤数据库记录,javascript,c#,ajax,asp.net-mvc,petapoco,Javascript,C#,Ajax,Asp.net Mvc,Petapoco,我想使用静态html DropdOnlist根据数据库列QtyRecieved、QtyRecieved和Void筛选数据库记录 QtyRecieved,QtyRecieved为十进制,void为布尔值 这是我试过的 @Html.DropDownList("Filter", new List<SelectListItem> { new SelectListItem{ Text="Open", Value = "0" },
@Html.DropDownList("Filter", new List<SelectListItem>
{
new SelectListItem{ Text="Open", Value = "0" },
new SelectListItem{ Text="Partial", Value = "1" },
new SelectListItem{ Text="All", Value = "2" }
})
在我的控制器中,我设置了else if条件来显示记录
我想,当选择了Open时,它会显示QtyRecieved==QtyRequested
选择Partial时,将显示QtyRecievedpublic ActionResult Index(string listval)
{
if (listval == "Open")
{
ViewBag.Items = db.Query<MaterialDeptItemVw>("Select mt.MaterialRequestId, mt.TDate, d.DepartmentName, it.ItemName, mt.QtyRequested, mt.Comment, mt.RecievedDateTime , u.UnitName from MaterialRequest mt INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId INNER JOIN Items it ON mt.ItemId = it.ItemId INNER JOIN Units u ON it.UnitId = u.UnitId where QtyRecieved = QtyRequested");
}
else if (listval == "Partial")
{
ViewBag.Items = db.Query<MaterialDeptItemVw>("Select mt.MaterialRequestId, mt.TDate, d.DepartmentName, it.ItemName, mt.QtyRequested, mt.Comment, mt.RecievedDateTime , u.UnitName from MaterialRequest mt INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId INNER JOIN Items it ON mt.ItemId = it.ItemId INNER JOIN Units u ON it.UnitId = u.UnitId where QtyRecieved < QtyRequested and Void = 0");
}
else if (listval == "All")
{
ViewBag.Items = db.Query<MaterialDeptItemVw>("Select mt.MaterialRequestId, mt.TDate, d.DepartmentName, it.ItemName, mt.QtyRequested, mt.Comment, mt.RecievedDateTime , u.UnitName from MaterialRequest mt INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId INNER JOIN Items it ON mt.ItemId = it.ItemId INNER JOIN Units u ON it.UnitId = u.UnitId");
}
return View();
}
公共操作结果索引(字符串listval)
{
如果(listval==“打开”)
{
ViewBag.Items=db.Query(“选择mt.MaterialRequestId、mt.TDate、d.DepartmentName、it.ItemName、mt.QtyRequested、mt.Comment、mt.ReceivedDateTime、u.UnitName从mt.DepartmentId上的物料请求mt内部联接部门d=d.DepartmentId内部联接项目mt.ItemId=it.ItemId内部联接单元u ON.UnitId=u.UnitId,其中QTYReceived=QtyRequested”);
}
else if(listval==“部分”)
{
ViewBag.Items=db.Query(“选择mt.MaterialRequestId、mt.TDate、d.DepartmentName、it.ItemName、mt.QtyRequested、mt.Comment、mt.ReceivedDateTime、u.UnitName from MaterialRequest mt内部联接部门d ON mt.DepartmentId=d.DepartmentId内部联接项目it ON mt.ItemId=it.ItemId内部联接单元u ON it.UnitId=u.UnitId,其中QTYReceived1) 声明为
public ActionResult Index(string listval)
的操作方法在AJAX回调中有data:{id:listval}
参数,因此AJAX调用从未到达控制器操作,因为它使用不同的参数名调用
2) return View()
在使用AJAX时不适用,需要从AJAX结果返回JSON数据或部分视图并更新目标DOM元素
因此,您应该将参数名称更改为与AJAXdata
参数完全匹配,并使用returnjson()
:
数据:{id:listval}
=>这应该是数据:{listval:listval}
,或者使用公共操作结果索引(字符串id)
。AJAX参数名称必须与服务器端方法参数名称匹配。您还应该返回JSON状态,而不是视图。此外,您不需要对返回的视图执行任何操作(您需要在成功回调中更新DOM)@StephenMuecke您的意思是我应该删除类型get并将success和error函数放在那里吗只需使用return JSON()
使用集合并修改AJAX以包含success
和error
处理,除非传递数组或集合,否则无需替换type:GET
。它仍然可以是type:“GET”,
,但需要包含成功函数(result){$(someElement).html(result);}
要添加视图,您将返回到DOM(并且您应该将模型返回到视图,而不是使用ViewBag
)。感谢您的帮助,但我从相同的方法返回视图,因为我从相同的视图输入数据并在相同的页面上列出它们。这就是为什么我使用ViewBag如果我返回JSON,那么我如何在相同的页面上列出记录AJAX回调旨在更新保持在相同页面上的元素,而不完全刷新页面。如果要使用ViewBag
,则需要从AJAX回调返回PartialView
,然后更新目标DOM元素。
public ActionResult Index(string listval)
{
if (listval == "Open")
{
ViewBag.Items = db.Query<MaterialDeptItemVw>("Select mt.MaterialRequestId, mt.TDate, d.DepartmentName, it.ItemName, mt.QtyRequested, mt.Comment, mt.RecievedDateTime , u.UnitName from MaterialRequest mt INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId INNER JOIN Items it ON mt.ItemId = it.ItemId INNER JOIN Units u ON it.UnitId = u.UnitId where QtyRecieved = QtyRequested");
}
else if (listval == "Partial")
{
ViewBag.Items = db.Query<MaterialDeptItemVw>("Select mt.MaterialRequestId, mt.TDate, d.DepartmentName, it.ItemName, mt.QtyRequested, mt.Comment, mt.RecievedDateTime , u.UnitName from MaterialRequest mt INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId INNER JOIN Items it ON mt.ItemId = it.ItemId INNER JOIN Units u ON it.UnitId = u.UnitId where QtyRecieved < QtyRequested and Void = 0");
}
else if (listval == "All")
{
ViewBag.Items = db.Query<MaterialDeptItemVw>("Select mt.MaterialRequestId, mt.TDate, d.DepartmentName, it.ItemName, mt.QtyRequested, mt.Comment, mt.RecievedDateTime , u.UnitName from MaterialRequest mt INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId INNER JOIN Items it ON mt.ItemId = it.ItemId INNER JOIN Units u ON it.UnitId = u.UnitId");
}
return View();
}
public ActionResult Index(string id)
{
// using DRY principle, just write the same part of the query in a string variable
// and add another part depending on case value inside switch block below
string baseQuery = @"Select mt.MaterialRequestId, mt.TDate,
d.DepartmentName, it.ItemName,
mt.QtyRequested, mt.Comment,
mt.RecievedDateTime , u.UnitName from MaterialRequest mt
INNER JOIN Department d ON mt.DepartmentId = d.DepartmentId
INNER JOIN Items it ON mt.ItemId = it.ItemId
INNER JOIN Units u ON it.UnitId = u.UnitId";
switch (id)
{
case "Open":
baseQuery += " where QtyRecieved = QtyRequested";
break;
case "Partial":
baseQuery += " where QtyRecieved < QtyRequested and Void = 0";
break;
case "All":
break; // not doing anything
default: goto case "All";
}
// create a list of object from query results
var items = db.Query<MaterialDeptItemVw>(baseQuery).ToList();
// return JSON data to populate target element
return Json(items, JsonRequestBehavior.AllowGet);
}