1

基本上,如果我想制作一个带有分页的搜索页面,我需要一个像这样的 url:

/Topics/Index?search=hi&page=1

我似乎无法弄清楚如何:

A)设置没有搜索和第1页的默认路由 /Topics/Index?page=1 甚至 /Topics/Index?search=&page=1

B) 使用 View 方法做同样的事情

我确实看到,如果我在控件上有一个方法:

Index(String search, Int32? page)

并使用网址:

/Topics/Index?search=hi&page=1 or /Topics/Index?search=hi

它给了我我想要的方法。我只需要一种方法来获取主题控制器的默认路由,以使用所述请求变量创建默认 URL。我只是不这么认为

/主题/索引/嗨/1

有利于搜索 url,主要是因为不能保证我会有搜索词或页面,所以它最终可能会像:

/主题/索引/1

4

2 回答 2

1

您在 RouteValueDictionary 中传递的任何未映射到您的 Url 的部分都将被添加为查询字符串参数。所以你可以这样做:

Url.GenerateUrl("Route", "Index", "Topics", 
  new RouteValueDictionary(new 
    { 
      page = this.Model.PageNumber, 
      search = this.Model.Search
    });
于 2009-06-11T00:24:17.370 回答
0

所以基本上我通过在控制器上设置默认值来处理非值。不确定这是不是最好的主意。

在 GLOBAL.asax 中:

routes.MapRoute
(
 "TopicDefault",                                              
 "Topic/{action}",                          
  new { controller = "Topic", action = "Index"}  
);

在控制器上:

public ActionResult Index(Int32? parentForumId, Int32? pageNumber, Int32? amountToShow)
{

  Int32 revisedPageNumber = pageNumber.HasValue ? pageNumber.Value : 0;
  Int32 revisedAmountToShow = amountToShow.HasValue ? amountToShow.Value : 10;
  Int32 revisedParentForumId = parentForumId.HasValue ? parentForumId.Value : 1;

  IList<TopicCreateViewModel> modelValues =
     Topic.GetListForGrid(revisedParentForumId, revisedPageNumber, 
       revisedAmountToShow, out realPage)


  return View("Index", modelValues);
}
于 2009-06-12T17:02:22.587 回答