使用控制器中的以下代码,我可以使用此url将类型的值传递为“rock”:“http:// localhost:2414 / Store / Browse?genre = rock”
public string Browse(string genre)
{
string message = HttpUtility.HtmlEncode("Store.Browse, Genre = "
+ genre);
return message;
}
当URL为“http:// localhost:2414 / Store / Browse / rock”时,我想传递相同的类型值
我该怎么做?
答案 0 :(得分:5)
首先,您的控制器操作不应该像目前那样。所有控制器操作都应返回ActionResult,并且您不应该在其中包含HTML编码参数。这是观点的责任:
public ActionResult Browse(string genre)
{
string message = string.Format("Store.Browse, Genre = {0}", genre);
// the cast to object is necessary to use the proper overload of the method
// using view model instead of a view location which is a string
return View((object)message);
}
然后在您的视图中显示和HTML编码如下:
<%= Html.DisplayForModel() %>
现在回到你关于处理这样的网址的问题。您只需在Global.asax
中定义以下路线:
routes.MapRoute(
"Default",
"{controller}/{action}/{genre}",
new { controller = "Home", action = "Index", genre = UrlParameter.Optional }
);
然后http://localhost:2414/Store/Browse/rock
将调用Browse
控制器上的Store
操作,将rock
作为genre
参数传递。
答案 1 :(得分:0)
我想纠正上面提到的一个答案,以造福他人;
“首先,您的控制器操作不应该像目前那样。所有控制器操作都应该返回一个ActionResult ...”
控制器操作应根据您返回的内容返回最具体的类型。例如。如果要返回部分视图,则使用PartialViewResult,或者如果要返回Json,则返回JsonResult。返回最具体的类型始终是最佳实践,单元测试将更准确。
P.S Controller Actions也可以返回,Strings,Booleans等。