查询字符串参数都是有用的想要包含非指定参数的默认值只是为了满足路径。
而且你不需要做什么特别的包括在呈现的网址这些参数。
看看下面的路线,例如:
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