0

我正在尝试提供一个链接来过滤搜索结果。

    <%= 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

4 回答 4

2

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

  1. 错误的路由信息​​:检查 global.ascx.cs/vb 文件中的 routes.MapRoute(...) 调用以确保正确配置 Home#Index 操作的路由
  2. 错误的控制器:尝试使用明确指定控制器的 ActionLink 的重载

如果您仍然无法使其工作,您可能需要发布更多信息(如路线映射代码、视图/控制器的名称)

于 2009-06-28T04:55:49.430 回答
0

看起来它应该工作。

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

于 2009-06-28T02:18:43.860 回答
0

但是,当我调试这个值时,即使是 useFilter 变量也没有正确设置。我的链接呈现为 localhost/home/index/true?page=0

我认为您的 useFilter 参数实际上已呈现。它映射到我猜的路线。

尝试为 searchText 设置硬编码值

如果它出现了,那么你没有在控制器中设置你的模型。

于 2009-06-28T18:52:42.063 回答
0

我也有类似的情况。

像这样的东西:

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

总是呈现为

localhost/myapp/Student/Index/1234

在我进行实验时,我注意到如果我将参数名称从更改为类似的名称,该Index部分将从 URL 中消失IDIDX

localhost/myapp/Student/?IDX=1234

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

为了解决这个问题,我只是停止使用Index获取 ID,而是定义了另一个方法,如下所示:

public ActionResult Detail(int ID)

毕竟,根据 RESTfull 设计原则,Index旨在显示“业务对象列表”或某种业务对象集合,而不是单个业务对象。所以传递业务对象 IDIndex有点违反模式。

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

我相信设计入口点的最佳实践Index是保持它无参数,或者只传递过滤/排序参数。

于 2012-08-07T15:34:30.113 回答