2

作为 MVC 4 的新手(或者实际上是任何用于 ASP.NET 的 MVC),我不禁觉得 URL 助手比我所看到的更多。

基本上,我已经阅读了有关使用 URL 中的查询字符串填充控制器方法中的属性的教程。我虽然不喜欢查询字符串,但更喜欢像样式一样的分段“文件夹”。

无需多言,这是示例 URL:

http://something.com/DataTypes/Search/searchString

这种方法实际上非常安全,因为只会有单字搜索

我在 DataTypes 控制器中尝试过

    [HttpGet]
    public ActionResult Search(String q)
    {
        ViewBag.ProvidedQuery = q;
        return View();
    }

还有一些其他的小变化,现在我只是想让字符串出现在视图中,但我似乎没有得到任何东西。

无论如何将url中的第三个字符串注入属性?如果不是,我应该使用哪个 URL 帮助程序类来获取 URL 中的字符串数据?即使我必须手动解析整个 URL,我只需要获取 URL 中的第三个元素作为字符串

非常n00b问题我确定,但要么我没有在某处找到这个简单的指南,要么我没有正确搜索谷歌......

4

3 回答 3

3

您缺少的是默认路由参数名称是“id”。所以你想这样做:

[HttpGet]
public ActionResult Search(String id)
{
    ViewBag.ProvidedQuery = id;
    return View();
}

如果你不想使用变量名 id,那么你可以修改你的 Route 看起来像这样:

routes.MapRoute(
    name: "Search",
    url: "DataTypes/Search/{searchString}",
    defaults: new { controller = "DataTypes", action = "Search", 
         searchString = UrlParameter.Optional });

如果您不希望字符串是可选的,则可以从默认对象中删除最后一个字段。

于 2012-09-27T02:21:35.593 回答
1

您可以使用 RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)) 来获取路由数据

RouteValueDictionary 的字符串 URL

于 2012-09-27T02:14:50.063 回答
1

您需要查看 Global.asax.cs 中的路由。例如,对于您的情况,您可以像这样向路由集合添加路由:

        routes.MapRoute("Search",
            "DataTypes/Search/{q}",
            new { controller = "DataTypes", action = "Search" }
        );

然后 q 参数将自动映射到您的操作。默认控制器映射可能会将其映射到“id”。

于 2012-09-27T02:16:58.050 回答