我在我正在處理的ASP.Net MVC項目中創建了一個非常類型的視圖,視圖只是一個索引頁,它列出了網格中一個SQL表的內容。ASP.Net MVC強類型視圖
我現在要添加功能來過濾此列表。我試圖通過在視圖中創建一個包含您可以過濾的值的下拉列表來創建表單。這個想法是,當用戶提交表單時,它會觸發控制器的Post index方法,該方法將從傳遞給方法的FormCollection中獲取選定值。
例如我的2層指標的方法是這樣的
public ActionResult Index()
{
DevAdminEntities db = new DevAdminEntities();
ViewData["StatusDropDown"] = new SelectList(db.TaskStatuses, "TaskStatusId", "StatusName");
return View(db.Tasks);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection formValues)
{
DevAdminEntities db = new DevAdminEntities();
ViewData["StatusDropDown"] = new SelectList(db.TaskStatuses, "TaskStatusId", "StatusName");
return View(from t in db.Tasks where t.Projects.ProjectId == int.Parse(Request.Form["StatusDropDown"]) new { t, t.Projects});
}
頁面加載時在其未過濾的形式,但是當我點擊提交按鈕應用過濾器,我得到以下錯誤顯示細膩
「傳遞到詞典中的模型項的類型爲‘System.Data.Objects.ObjectQuery 1[System.Int32]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [DevAdmin.Models.Tasks]’。」
視圖看起來像這樣
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DevAdmin.Models.Tasks>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<title>Index</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Tasks</h2>
<%= Html.ValidationSummary() %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Filters</legend>
<p>
<%= Html.DropDownList("StatusDropDown") %>
<input type="submit" value="Filter" />
</p>
</fieldset>
<% } %>
<table>
<tr>
<th></th>
<th>
TaskId
</th>
<th>
Subject
</th>
<th>
Description
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.ActionLink("Edit", "Edit", new { id=item.TaskId }) %> |
<%= Html.ActionLink("Details", "Details", new { id = item.TaskId })%>
</td>
<td>
<%= Html.Encode(item.TaskId) %>
</td>
<td>
<%= Html.Encode(item.Subject) %>
</td>
<td>
<%= Html.Encode(item.Description) %>
</td>
</tr>
<% } %>
</table>
<p>
<%= Html.ActionLink("Create New", "Create") %>
</p>
</asp:Content>
任何想法我做錯了什麼?
還有一個提示:通常最好將過濾器設置爲「GET」方法而不是「POST」。這樣人們可以爲他們的過濾器添加書籤,並且可以創建指向特定過濾器的鏈接過濾器是一種不會改變資源中的任何內容的操作,因此它應該是「GET」。 – Gidon 2009-06-04 08:08:52