2009-12-29 63 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