Html.ActionLink问题

时间:2009-06-28 02:11:00

标签: asp.net-mvc 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变量。

我的链接呈现为localhost / home / index / true?page = 0

任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

代码段看起来很好。我认为有两个可能的错误:

  1. 错误的路线信息:检查 routes.MapRoute(...)调用 global.ascx.cs / vb文件以确保 Home#Index动作的路线是 正确配置
  2. 错误的控制器:尝试使用显式指定控制器的ActionLink的重载
  3. 如果仍然无法使其工作,您可能希望发布更多信息(如路线映射代码,视图/控制器名称)

答案 1 :(得分:0)

它看起来应该有效。

您是否确认传递给ActionLink的模型字段实际上包含数据?

答案 2 :(得分:0)

  

但是,当我调试它时,未正确设置值,甚至是useFilter变量。   我的链接呈现为localhost / home / index / true?page = 0

我认为实际呈现了你的useFilter参数。它映射到我猜的路线。

尝试为searchText设置硬编码值

  

如果显示,则表示您未在控制器中设置模型。

答案 3 :(得分:0)

我有类似的情况。

这样的事情:

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

始终呈现为

localhost/myapp/Student/Index/1234

在我进行实验时,如果我将参数名称从Index更改为ID

,我注意到IDX部分从网址中消失了
localhost/myapp/Student/?IDX=1234

事实证明,参数名称ID是特殊的,因为Global.asax.cs中的默认路由条目(设置RESTful业务对象访问模式)

要解决此问题,我只是停止使用Index获取ID,而是定义了另一种方法:

public ActionResult Detail(int ID)

毕竟,根据RESTfull设计原则,Index用于显示“业务对象列表”或某种业务对象集合,而不是单个业务对象。因此,将业务对象ID传递给Index有点违反了模式。

而不是扭动手臂并强迫我笨拙的设计,我改变了自然的方式。

我认为设计Index入口点的最佳做法是保持参数不变,或仅传递过滤/排序参数。