2009-12-29 148 views
10

出于某种原因,我坚持这一点。我需要根据同一视图中的DropDownList过滤来自View的结果。基本思想是这样的:我有一个属于不同合作伙伴的提供者列表,但提供者列表包含所有提供者(对于所有合作伙伴)。我需要能够在合作伙伴看到合作伙伴时显示合作伙伴(否则,默认列表将是所有提供商)。我的看法目前是“默认”(全部显示),但由于某种原因,我坐在这里盯着显示器(最近2个小时!)试图找出如何过滤这些结果。ASP.NET MVC筛选结果列表/网格

任何建议从哪里开始/如何做?

回答

10

编辑:如果您想要使用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它将是空的。因此,您正在发布的操作可以告诉用户是否意图完成她的更改。

+0

真棒回答。谢谢! – SlackerCoder 2009-12-30 13:59:21

+0

非常欢迎。这对我来说至关重要,因为我试图向同事展示MVC可以做我们需要的一切。 – 2009-12-30 15:11:40

+2

似乎教程链接已损坏... – SteveC 2016-07-13 10:54:49

3

还有很多皮肤这个猫的方法。这是一个。

用METHOD = GET的形式将您的DropDownList括起来。

<form action="" method="get"> 
    <select name="provider"> 
    <option>1</option> 
    <!-- etc --> 
    </select> 
</form> 

然后,在你的控制器,过滤器基于中传递提供商的价值。记得把它当作一个可空参数,这样你可以有某种行为时,它是空的。

没有发布一些当前的代码,很难得到比这更具体的代码。

+1

+1代表一个简单的代码示例。 – 2009-12-29 21:24:28

1

假设您可能将模型传递给视图,并且该模型是合作伙伴的列表或IEnummerable。你想要做的是限制列表。为了做到这一点,在视图中添加一个下拉列表并填写一些可能的合作伙伴。这可以通过在ViewData中添加一个列表或者将模型扩展回视图来完成。两者都有优势。现在,当您更改下拉菜单重新加载页面,但追加了一个参数即过滤器。在控制器中检查操作中的参数,如果不存在,则返回一个未过滤的列表,如果是,则应用过滤器并返回列表。该视图将无视您提供的任何内容。

至于过滤,你可能想尝试使用LINQ。

0

您可能需要一个参数给您的控制器操作,可能是提供程序的(可为空的?)ID,以便在您从数据库获取结果时过滤结果。然后,只需使用相同的视图列出它们,并在下拉列表更改时请求新的列表。

6

添加以前的答案。

要创建一个下拉(在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

+1我正在寻找一个剃刀特定的答案!谢谢! – 2011-04-13 13:30:23