查詢字符串參數都是有用的想要包含非指定參數的默認值只是爲了滿足路徑。
而且你不需要做什麼特別的包括在呈現的網址這些參數。
看看下面的路線,例如:
routes.MapRoute
(
"QuestionsTagged",
"questions/tagged/{tag}",
new { controller = "Questions", action = "Tagged" }
);
如果您在使用呈現一個鏈接到該路線:
Url.RouteUrl
(
"QuestionsTagged",
new
{
tag = "java",
page = 9802,
sort = "newest",
pagesize = 15
}
)
...然後路由引擎足夠聰明地看到,路線包含一個名爲tag
的參數,並且傳遞的路由值對象也有一些名爲tag
的東西,因此它在路由中使用該值。
提供任何路由值是不在路線(page
,在這種情況下sort
和pagesize
)獲得上漲了作爲查詢字符串參數相應的參數。所以上面的電話Url.RouteUrl
將返回/questions/tagged/java?page=9802&sort=newest&pagesize=15
。
而且你的操作方法可以明確地列出它的簽名,這些參數(促進可讀性和可維護性),或者你可以通過Request.QueryString
訪問它們。
public class QuestionsController : Controller
{
// I can explicitly list the parameters in my signature and let routing do
// its magic, like this...
public ViewResult Tagged(string tag, int? page, int? pagesize)
{
// ...or I can grab parameters like this:
string sort = Request.QueryString["sort"];
return View();
}
}
請注意,action方法的參數不必與路徑中指定的參數相匹配。 (在路由中,我只指定了tag
,但操作方法的簽名列表爲tag
,page
和pagesize
。)但是,不是路由參數的操作方法的任何參數都必須是引用或可爲空類型。
值得一提的是,我發現在某些情況下,ValueType參數需要爲空來滿足不提供它們的情況(即輸入Url是'clean'),因此允許在空值時應用默認值,而不是處理'0'值。 –
感謝您的信息。這一切都是有道理的,我只是想知道你如何生成你的路線之一'並且'將尾部參數追加到路線的末端?有沒有可以適應這種情況的輔助方法? – Marc
@Marc - 您正在尋找'Url.Action',並且可以在這裏找到一種使用類型的示例:http://stackoverflow.com/questions/5818065/how-to-pass-request-querystring-to -url行動 – amurra