2011-04-06 43 views
1

重寫routevalues我有一個索引視圖,是以頁面參數,像這樣:爲childaction

/News?page=2 

但在佈局這個觀點我有這個childaction:

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

但查詢字符串「頁面「仍然是2 ..怎麼回事?以及如何覆蓋childaction的頁面?

回答

1

這是因爲子操作在綁定值時首先查看原始請求查詢字符串,然後在作爲參數傳遞給 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"); 
} 
+0

這將解決問題當然,但只是暫時的。如果我在另一個視圖中突然實現了childaction,那麼很容易忘記檢查父操作是否也使用了新的查詢字符串,是不是我可以覆蓋的方法? – 2011-04-06 11:19:46

+0

@馬丁漢森,請參閱我的更新。 – 2011-04-06 11:25:24

+0

嗯好吧,是的,我直接從請求中獲取querystrings,現在我將其更改爲public ActionResult Index(int page,int pagesize) 但是,你能否澄清爲什麼這樣做的做法很糟糕? – 2011-04-06 11:37:38

相關問題