从ASP.NET MVC中的URL获取字符串

时间:2011-01-30 19:47:41

标签: asp.net-mvc

使用控制器中的以下代码,我可以使用此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”时,我想传递相同的类型值

我该怎么做?

2 个答案:

答案 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等。