出于某种原因,我坚持这一点。我需要根据同一视图中的DropDownList过滤来自View的结果。基本思想是这样的:我有一个属于不同合作伙伴的提供者列表,但提供者列表包含所有提供者(对于所有合作伙伴)。我需要能够在合作伙伴看到合作伙伴时显示合作伙伴(否则,默认列表将是所有提供商)。我的看法目前是“默认”(全部显示),但由于某种原因,我坐在这里盯着显示器(最近2个小时!)试图找出如何过滤这些结果。ASP.NET MVC筛选结果列表/网格
任何建议从哪里开始/如何做?
出于某种原因,我坚持这一点。我需要根据同一视图中的DropDownList过滤来自View的结果。基本思想是这样的:我有一个属于不同合作伙伴的提供者列表,但提供者列表包含所有提供者(对于所有合作伙伴)。我需要能够在合作伙伴看到合作伙伴时显示合作伙伴(否则,默认列表将是所有提供商)。我的看法目前是“默认”(全部显示),但由于某种原因,我坐在这里盯着显示器(最近2个小时!)试图找出如何过滤这些结果。ASP.NET MVC筛选结果列表/网格
任何建议从哪里开始/如何做?
编辑:如果您想要使用jQuery和AJAX(由于只有细分列表将刷新)提供更好的用户体验,请参阅this tutorial。
如果我理解正确,你基本上想做一个WebForms风格的回发。
比方说,你可以控制国家和国家的细分(例如州,省等)。当国家发生变化时,您需要显示适当的细分。
所以这将是观点:
<% using (Html.BeginForm()) { %>
<%=Html.DropDownList("Address.CountryId", new SelectList(Country.GetAll(), "Id", "Name"), new { onchange = "this.form.submit();" })%>
<%=Html.DropDownList("Address.CountrySubdivisionId", new SelectList(CountrySubDivision.GetByCountryId(Model.CountryId), "Id", "Name"))%>
<input type="submit" name="btnSubmit" value="Submit"/>
<%} %>
这是关键,越来越依赖列表过滤:
new { onchange = "this.form.submit();" }
而在控制器,你有这样的事情:
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Index(string btnSubmit)
{
if (btnSubmit == null)
{
// return the view displayed upon GET
}
else
{
// process the submitted data
}
}
在上面的代码中,如果表单提交是通过更改下拉列表中的值触发的,则btnSubm它将是空的。因此,您正在发布的操作可以告诉用户是否意图完成她的更改。
还有很多皮肤这个猫的方法。这是一个。
用METHOD = GET的形式将您的DropDownList括起来。
<form action="" method="get">
<select name="provider">
<option>1</option>
<!-- etc -->
</select>
</form>
然后,在你的控制器,过滤器基于中传递提供商的价值。记得把它当作一个可空参数,这样你可以有某种行为时,它是空的。
没有发布一些当前的代码,很难得到比这更具体的代码。
+1代表一个简单的代码示例。 – 2009-12-29 21:24:28
假设您可能将模型传递给视图,并且该模型是合作伙伴的列表或IEnummerable。你想要做的是限制列表。为了做到这一点,在视图中添加一个下拉列表并填写一些可能的合作伙伴。这可以通过在ViewData中添加一个列表或者将模型扩展回视图来完成。两者都有优势。现在,当您更改下拉菜单重新加载页面,但追加了一个参数即过滤器。在控制器中检查操作中的参数,如果不存在,则返回一个未过滤的列表,如果是,则应用过滤器并返回列表。该视图将无视您提供的任何内容。
至于过滤,你可能想尝试使用LINQ。
您可能需要一个参数给您的控制器操作,可能是提供程序的(可为空的?)ID,以便在您从数据库获取结果时过滤结果。然后,只需使用相同的视图列出它们,并在下拉列表更改时请求新的列表。
添加以前的答案。
要创建一个下拉(在ASP .NET MVC 3)我做了以下内容:
代码添加到Index.cshtml
@using (Html.BeginForm())
{
@Html.DropDownList("EmployeeId", (SelectList)ViewData["EmployeeId"])
<input type="submit" name="btnSubmit" value="Submit"/>
}
到YourModelNameController.cs添加代码为默认的ActionResult索引()
public ActionResult Index()
{
//create a selectlist
var employeeList = from el in db.Employee select el;
ViewData["EmployeeId"] = new SelectList(employeeList, "EmployeeId", "TmName");
return View(modelName);
}
+1我正在寻找一个剃刀特定的答案!谢谢! – 2011-04-13 13:30:23
我知道的最佳解决方案就是那一个。
真棒回答。谢谢! – SlackerCoder 2009-12-30 13:59:21
非常欢迎。这对我来说至关重要,因为我试图向同事展示MVC可以做我们需要的一切。 – 2009-12-30 15:11:40
似乎教程链接已损坏... – SteveC 2016-07-13 10:54:49