ASP.NET MVC选择不同的值进入下拉列表以进行过滤,保留值

问题描述 投票:-1回答:2

我有一个基本的MVC索引视图,带有一个简单的文本框用于搜索,它工作正常。我想添加一个下拉列表过滤器,以便从其中一个字段中提取不同的值。我通过使用这样的文章得到了它:

MVC - DropDown containing all distinct values for one field in database?

您只需遍历模型中的不同值即可。问题是,一旦你选择了一个值并且表单提交,它就会过滤得很好,但现在下拉列表只包含一个值(当前选中的值),因为现在你的视图被过滤了。

有没有一种简单的方法来保持原始值或在视图中使用Razor告诉它重新搜索您的模型没有过滤器以填充下拉列表?

这是视图的一部分

@model IEnumerable<KPI_OnlineBilling_MVC.Models.OBProjectRequisition>

 @Html.DropDownList("region", new SelectList(Model.Select(i => i.MMRegion).Distinct().ToList()), new { onchange = "this.form.submit();" })

而控制器基本上是

public ActionResult Index(string searchString, string Regions)
{
var requisitions = from s in db.OBProjectRequisitions select s;
if (!String.IsNullOrEmpty(Regions))
{
requisitions = requisitions.Where(s => s.MMRegion.Contains(Regions));
}

return View(requisitions.ToList());
}
c# asp.net asp.net-mvc razor
2个回答
0
投票

您通常需要以与初始视图操作完全相同的方式重新填充模型(或viewdata)。


0
投票

基本上,我所做的是在视图中添加它

@Html.DropDownList("Regions", "* ALL")

在控制器中,我确定其中一个参数是什么“字符串区域”,所选值通过字符串来进行,我可以对其进行过滤。

var regions = new SelectList(
db.ModelStuffs.Select(r => r.Region).Distinct().OrderBy(Region => Region).ToList(), Regions);

ViewBag.Regions = regions;

是的,是的。我知道人们讨厌使用viewbag,但这是将数据传递给视图的最简单方法,否则根据视图本身过滤数据会导致当前过滤的项目显示在下拉列表中

最后一个“Regions”参数设置列表的选定值,因此当它在视图中呈现时,它会自动选择您选择的最后一个值

我不确定人们使用viewbag这样的问题会有什么样的问题。它比使用任何类型的TempData对象更好,因为如果您使用多个选项卡/窗口,后者将导致问题。对于非常常使用的内部应用程序,这似乎工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.