C# 如何为此ActionLink创建正确的路由值?
C# 如何为此ActionLink创建正确的路由值?,c#,asp.net-mvc,actionlink,routevalues,C#,Asp.net Mvc,Actionlink,Routevalues,SearchResults.aspx的模型是PersonSearch的一个实例;当一个新页面的请求到达时(GET请求),action方法应该接受它并计算新的结果 [AcceptVerbs(HttpVerbs.Get)] public ActionResult SearchResults(PersonSearch search, int? page) { ViewData["Results"] = new PaginatedList<Person>(_searchService
SearchResults.aspx
的模型是PersonSearch
的一个实例;当一个新页面的请求到达时(GET请求),action方法应该接受它并计算新的结果
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult SearchResults(PersonSearch search, int? page)
{
ViewData["Results"] = new PaginatedList<Person>(_searchService.FindPersons(search), page ?? 0, 1);
return View("SearchResults", search);
}
[AcceptVerbs(HttpVerbs.Get)]
公共行动结果搜索结果(个人搜索,int?页)
{
ViewData[“Results”]=新的分页列表(_searchService.FindPersons(搜索),第0页,第1页);
返回视图(“搜索结果”,搜索);
}
然后我必须生成上一个/下一个链接:
<%= Html.ActionLink("Next Page >", "SearchResults", routeValues) %>
如果我使用
routeValues=ViewData.Model
我可以看到传递给地址的对象属性,但我不能添加“page”参数。我认为最好用正确的值创建另一个对象,而不是使用(并可能更改当前的routeValues):
您需要覆盖ToString()。Scott Guthrie的这篇博文帮助我了解URL路由:
我喜欢他包括测试用例!
如果你正在使用剃须刀(我知道OP在剃须刀发明前四年就提出了这个问题,但人们发现这个问题可能是在使用它)
通过使用内联@helper方法,我可以让一些东西正常工作
@helper RunnerLink(PersonSearch model, int page)
{
var routeParms =new RouteValueDictionary(model.GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(model, null)));
routeParms.Add("page", page.ToString());
routeParms.Add("Controller", "Property");
@Html.ActionLink("Search", "Index", routeParms)
}
用法将很简单--
这并不是最优雅的解决方案,但如果您想将对象作为routeValue传入,它可以很好地工作,但您需要传递附加项,例如
控制器
,区域
,或者在OPs case页面
,您需要使用RouteLink而不是ActionLink。您的代码应该如下所示
@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 })
我得到:SearchResults?search=RegistryManager.Models.PersonSearch&page=1不起作用…它传递的是类的名称,而不是与对象属性对应的键/值对。。。
@RunnerLink(myPersonSearchInstance, 1)
@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 })