覆盖儿童用途的路线值

时间:2011-04-06 11:07:07

标签: asp.net-mvc-3

我有一个索引视图,它采用如下的页面参数:

/News?page=2

但是在该视图的布局中,我有这个小动作:

@{Html.RenderAction("Index", "Comments", new {page=1, pagesize = 10});}

但查询字符串“页面”仍为2 ..怎么来的?以及如何覆盖子进程的页面?

1 个答案:

答案 0 :(得分:1)

这是因为子操作在绑定值时首先查看原始请求查询字符串,然后将该参数作为参数传递给RenderAction帮助程序。您可以为此参数使用其他名称以避免这种歧义。


更新:

无法重现您描述的行为。

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [ChildActionOnly]
    public ActionResult Test(string page)
    {
        return Content(page, "text/html");
    }
}

查看(~/Views/Home/Index.cshtml):

@{Html.RenderAction("Test", "Home", new { page = 1 });}

查询/Home/Index?page=5时,会显示正确的值1,并且子操作中的page参数为1。

显然,如果在你的孩子行动中,你是从请求手动获取这个值,它将无法正常工作,但这不是你应该做的事情:

[ChildActionOnly]
public ActionResult Test()
{
    string page = Request["page"] as string;
    return Content(page, "text/html");
}