Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MVC5中如何基于静态dropdownlist过滤数据库记录_Javascript_C#_Ajax_Asp.net Mvc_Petapoco - Fatal编程技术网

Javascript MVC5中如何基于静态dropdownlist过滤数据库记录

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 DropdOnlist根据数据库列QtyRecieved、QtyRecieved和Void筛选数据库记录

QtyRecieved,QtyRecieved为十进制,void为布尔值

这是我试过的

@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时,将显示QtyRecieved和Void=True的记录

当选择All时,它将显示所有记录

请帮助我查询以筛选记录或显示其他方法

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();
        }
公共操作结果索引(字符串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,其中QTYReceived代码中有几个问题:


1) 声明为
public ActionResult Index(string listval)
的操作方法在AJAX回调中有
data:{id:listval}
参数,因此AJAX调用从未到达控制器操作,因为它使用不同的参数名调用

2)
return View()
在使用AJAX时不适用,需要从AJAX结果返回JSON数据或部分视图并更新目标DOM元素

因此,您应该将参数名称更改为与AJAX
data
参数完全匹配,并使用
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);
}