我有一个使用C#和Razor语法的MVC网页,它显示了从数据库带回的结果列表,我想用下拉菜单过滤结果。
基本上我只希望显示列值等于下拉菜单值的结果。我唯一的问题是该列是BIT数据类型,我无法让它工作。
我已经尝试将下拉列表的值转换为bool,但这也不起作用。我现在不上班,所以不能发布任何代码抱歉。
我最初查询数据库的方式是使用搜索字符串,基本上将不同的列与搜索字符串进行比较,以及搜索字符串是否为“”或为空。我刚刚将下拉菜单查询添加到此搜索字符串选择查询的末尾,因为它似乎是唯一可以去的地方,它是这样的 -
from db(db.Name.Contains(searchString) && db.InUse.Equals(dropdownValue))
select db
我知道这不完全正确,但你希望得到这个想法。只是为了澄清,这是我遇到麻烦的InUse.Equals,因为InUse是一个BIT数据类型,dropdownValue是一个INT,在转换为BOOL时甚至不起作用。我没有错误,页面加载但实际上并没有过滤结果。
任何帮助都会很棒,我会尝试使用实际代码更新帖子。
答案 0 :(得分:0)
这是一个非常基本的示例,可用于显示如何根据控制器方法中的值过滤掉集合中的元素。
HttpGet只返回整个列表,但HttpPost将根据表单中的值过滤列表,并返回过滤后的列表作为视图的模型。
@model List<ServiceCatalog.Models.DemoClass>
@{
ViewBag.Title = "Demo";
}
<h2>Demo</h2>
<table class="table table-condensed table-hover table-striped table-bordered">
<thead>
<tr>
<th>InUse</th>
<th>Name</th>
</tr>
</thead>
<tbody>
@foreach (var m in Model)
{
<tr>
<td>@m.InUse</td>
<td>@m.Name</td>
</tr>
}
</tbody>
</table>
@using (Html.BeginForm())
{
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2" for="Name">Seach String:</label>
<div class="col-sm-10">
<input type="text" value="" name="Name" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="InUse">InUse:</label>
<div class="col-sm-10">
<select class="form-control" name="InUse">
<option value="true">True</option>
<option value="false">False</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
}
public class DemoClass
{
public string Name { get; set; }
public Boolean InUse { get; set; }
}
public class DemoController : Controller
{
[HttpGet]
public ActionResult Demo()
{
var demoList = GetListOfDemoClass().ToList();
return View(demoList);
}
[HttpPost]
public ActionResult Demo([Bind(Include = "Name,Inuse")]DemoClass demoC)
{
var demoList = (from db in GetListOfDemoClass()
where (demoC.Name == null || db.Name.Contains(demoC.Name))
&& db.InUse.Equals(demoC.InUse)
select db).ToList();
return View(demoList);
}
private IEnumerable<DemoClass> GetListOfDemoClass()
{
yield return new DemoClass() { InUse = false, Name = "Thing 1" };
yield return new DemoClass() { InUse = true, Name = "Dog 2" };
yield return new DemoClass() { InUse = false, Name = "Place 3" };
yield return new DemoClass() { InUse = true, Name = "Raptor 4" };
yield return new DemoClass() { InUse = false, Name = "Person 5" };
yield return new DemoClass() { InUse = true, Name = "Hateful 6" };
yield return new DemoClass() { InUse = false, Name = "Cat 7" };
yield return new DemoClass() { InUse = true, Name = "Mango 8" };
yield return new DemoClass() { InUse = false, Name = "Bird 9" };
yield return new DemoClass() { InUse = true, Name = "Caller 10" };
}
}