2009-06-28 64 views
0

我在嘗試提供一個鏈接來過濾搜索結果。Html.ActionLink問題

<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%> 

控制器定義是這樣

public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption) 

然而,當我調試此值沒有被正確設置,即使是useFilter變量。

我的鏈接呈現本地主機的/ home /索引/真的嗎?頁= 0

任何想法如何解決這一問題?

回答

2

代碼段看起來很好。我認爲有兩個可能的錯誤:

  1. 路線錯誤信息:檢查 routes.MapRoute(...)在 global.ascx.cs調用/ VB文件,以確保 的家#指數的路線動作 正確配置
  2. 錯誤控制器:嘗試使用ActionLink的過載,明確指定控制器

如果仍然不能使它工作,你可能要發佈更多的信息(如路由映射代碼,視圖/控制器的名稱)

+0

這是一個路線問題。我忽略了我添加路線的順序。 – ddd 2009-07-23 13:12:10

0

它看起來應該工作。

您是否已驗證您傳遞給ActionLink的模型字段實際上是否包含數據?

0

但是,當我調試這個值的設置不正確,甚至useFilter變量。 我的鏈接被渲染本地主機/ home/index/true?page = 0

我想你的useFilter參數實際上是呈現。它映射到我猜的路線。

嘗試爲SEARCHTEXT

設定一個硬編碼值。如果它出現,那麼你沒有設置你的模型在控制器中。

0

我有類似的情況。

事情是這樣的:

Html.ActionLink("Click me", "Index", "Student", 
     { ID = theclass.StudentID }, null) 

總是呈現爲

localhost/myapp/Student/Index/1234 

當我嘗試,我注意到,Index部分從URL中消失了,如果我從ID更改參數名稱類似IDX

localhost/myapp/Student/?IDX=1234 

事實證明,由於Global.asax中的默認路由條目,參數名稱ID是特殊的。CS(其中規定了基於REST的業務對象的訪問模式)

要解決這個問題,我簡單地使用Index以ID停止,而不是像這樣定義的另一種方法:

public ActionResult Detail(int ID) 

畢竟,每個問題的REST設計原則,Index是爲了顯示「業務對象列表」或某種業務對象集合,而不是單個業務對象。所以傳遞業務對象ID到Index是違反了模式。

沒有扭動手臂,強迫我的尷尬設計,我改變了自然的方式。

我認爲設計Index入口點的最佳做法是保持無參數或僅傳遞過濾/排序參數。