出於某種原因,我堅持這一點。我需要根據同一視圖中的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