Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为此ActionLink创建正确的路由值?_C#_Asp.net Mvc_Actionlink_Routevalues - Fatal编程技术网

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 })