這是因爲子操作在綁定值時首先查看原始請求查詢字符串,然後在作爲參數傳遞給
RenderAction
幫助器之後。您可以使用此參數的不同名稱來避免這種不明確性。
UPDATE:
無法重現您所描述的行爲。
控制器:
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。
顯然如果在你的子動作中,你從請求中手動獲取這個值,它將不起作用,但這並不是什麼事g你應該做任何反正:
[ChildActionOnly]
public ActionResult Test()
{
string page = Request["page"] as string;
return Content(page, "text/html");
}
這將解決問題當然,但只是暫時的。如果我在另一個視圖中突然實現了childaction,那麼很容易忘記檢查父操作是否也使用了新的查詢字符串,是不是我可以覆蓋的方法? – 2011-04-06 11:19:46
@馬丁漢森,請參閱我的更新。 – 2011-04-06 11:25:24
嗯好吧,是的,我直接從請求中獲取querystrings,現在我將其更改爲public ActionResult Index(int page,int pagesize) 但是,你能否澄清爲什麼這樣做的做法很糟糕? – 2011-04-06 11:37:38