【发布时间】:2019-02-06 15:57:05
【问题描述】:
我开始使用 MVC 创建我的项目,使用 mvc 创建不同的项目真的很享受。
所以我不久前创建了一个数据表,当您在单个下拉列表中选择值时过滤数据
但我仍然对在单个视图中使用多个下拉列表和两个模型过滤数据感到好奇
我做了什么...首先,我创建了一个类,我可以用它来使用两个模型显示我的两个数据表
这是我在 mvc 中的类
public class MyData
{
public IEnumerable<pmTA_ProjectCategory> ProjectCategory { get; set; }
public IEnumerable<pmTA_FundCategory> FundCategory { get; set; }
}
创建我的类后,我为两个数据表创建了一个代码,使用一个视图作为索引,一个视图用于局部视图来调用这两个数据表
这是索引视图和局部视图视图的代码,名称为“MyPartialView”
查看索引:
@using myProject.Models;
@model MyData
<div id="myPartialView">
@Html.Partial("MyPartialView",Model)
</div>
@if (Model.ProjectCategory != null) {
<table class="table table-bordered table-hover ">
<thead>
<tr>
<th>id</th>
<th>title </th>
<th>
description
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.ProjectCategory)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.id)
</td>
<td>
@Html.DisplayFor(modelItem => item.title)
</td>
<td>
@Html.DisplayFor(modelItem => item.description)
</td>
</tr>
}
</tbody>
</table>
}
局部视图
<table id="myDataTable" class="table table-bordered table-hover ">
<thead>
<tr>
<th>id</th>
<th>code</th>
<th>
title
</th>
<th>
description
</th>
<th>--</th>
<th>--</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.FundCategory)
{
string selectedRow = "";
if (item.id == ViewBag.fund)
{
selectedRow = "success";
}
<tr class="@selectedRow">
<td>
@Html.DisplayFor(modelItem => item.id)
</td>
<td>
@Html.DisplayFor(modelItem => item.code)
</td>
<td>
@Html.DisplayFor(modelItem => item.title)
</td>
<td>
@Html.DisplayFor(modelItem => item.description)
</td>
<td>
@Html.ActionLink("Edit", "FundCategoryEdit", new { id =
item.id }, new { @class = "btn btn-primary" })
</td>
<td>
@Html.ActionLink("Select", "Index", new {
fund_category_id = item.id }, null)
</td>
</tr>
}
</tbody>
</table>
为了使我的视图发挥作用,我在控制器中创建了代码以显示两个数据表,我在控制器中声明了我的类的名称
这是我控制器中的代码,第一个代码用于部分视图数据表,第二个代码用于视图索引
对于部分:
var viewModel = new MyData();
viewModel.FundCategory = (from p in db.pmTA_FundCategory
select new
{
id = p.id,
code = p.code,
title = p.title,
description = p.description,
status = p.status
}).ToList()
.Select(x => new pmTA_FundCategory()
{
id = x.id,
code = x.code,
title = x.title,
description = x.description,
status = x.status
});
查看索引
if (fund_category_id != null)
{
ViewBag.fund = fund_category_id.Value;
viewModel.ProjectCategory = (from p in db.pmTA_ProjectCategory
join g in db.pmTA_FundCategory
on p.fund_category_id equals g.id
where p.fund_category_id == fund_category_id
select new
{
id = p.id,
title = p.title,
description = p.description,
title1 = g.title,
status = p.status
}).ToList()
.Select(x => new pmTA_ProjectCategory()
{
id = x.id,
title = x.title,
description = x.description,
title1 = x.title1,
status = x.status
});
}
return View(viewModel);
它们一起在 Index 控制器中,但我将其分开以便您理解我的代码
if 条件的目的是为了显示我的视图索引数据表,当单击基于那里的 ID 的部分数据表的“选择”按钮时,您可以使用上面的代码作为显示其他数据的参考使用其他数据表的表...
为了显示我的多个下拉菜单,我总是使用这个代码
显示下拉列表的索引视图代码
<div>
@Html.DropDownList("id", ViewBag.funds as SelectList, "Select...", new
{ @class = "form-control" })
</div>
<div>
@Html.DropDownList("projectcat", ViewBag.proj as SelectList,
"Select...", new
{ @class = "form-control" })
</div>
控制器中的下拉代码,用于根据数据库数据显示其中的数据
第一个和第二个下拉菜单
var data1 = from p in db.pmTA_FundCategory
select new
{
id = p.id,
code = p.code,
title = p.title,
description = p.description
};
SelectList list = new SelectList(data1, "id", "title");
ViewBag.funds = list;
var data2 = from p in db.pmTA_ProjectCategory
select new
{
id = p.id,
title = p.title,
description = p.description
};
SelectList list1 = new SelectList(data2, "id", "title");
ViewBag.proj = list1;
问题是...如何在不使用任何插件但借助 javascript 或任何过滤数据表数据的方法的情况下使用多个下拉列表过滤部分数据表?
一旦我选择了多个下拉列表的值,我的部分数据表将显示与所选的多个下拉列表相对应的数据...
【问题讨论】:
-
你必须在主视图中显示
ProjectCategory,在部分视图中显示FundCategory对吧? -
您必须用一个下拉菜单过滤
ProjectCategory数据表,而用另一个下拉菜单过滤其他FundCategory数据表。意味着两个数据表之间没有任何关系意味着当我从第一个下拉列表中更改选项时,只有ProjectCategory数据表将被过滤,而对其他FundCategory数据表没有任何影响,反之亦然。让我知道,我会添加答案。 -
在将数据表过滤到另一个数据表方面我没有任何顾虑,我唯一关心的是使用多个下拉菜单过滤部分数据表
-
我的部分数据表和我的索引视图中的数据表没有问题
-
两张表都处于局部视图中对您有好处吗?
标签: javascript c# jquery asp.net-mvc