MVC查看搜索和字符串ID

时间:2015-01-02 05:19:29

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我发现了一些我不明白的奇怪行为。我的表的主键是一个字符串,因此我使用字符串作为我的id mvc操作。

我的网址看起来像这样:

 http://localhost:3333/profile/edit/fsdfsdsdfsdfff

动作如下:

    public ActionResult Edit(string id)
    {
        return View(id);
    }

我检查并确保id变量不为null。它已正确填充。

我的路线配置如下:

        routes.MapRoute(
            name: "Default2",
            url: "Profile/Edit/{id}",
            defaults: new { controller = "Profile", action = "Edit" }

        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这是错误:

  

视图&fsdfsdsdfsdfff'或者它的主人没有找到或没有看法   引擎支持搜索的位置。以下地点是   搜索:〜/ Views / Profile / fsdfsdsdfsdfff.cshtml   〜/查看/资料/ fsdfsdsdfsdfff.vbhtml   〜/查看/共享/ fsdfsdsdfsdfff.cshtml   〜/查看/共享/ fsdfsdsdfsdfff.vbhtml

为什么世界上使用我的路线值来查找视图?值得注意的是,action中的id值是一个字符串。如果我将它更改为int,它工作正常。是什么给了什么?

2 个答案:

答案 0 :(得分:2)

这不是路由问题,这是查找视图的问题。当你打电话

return View(id);

您实际上正在调用一个方法,其中parameter是一个视图名称。使用int参数时,您不会遇到此问题,因为它没有带有单个整数参数的重载。

为了解决这个问题,你应该将string参数转换为object,在这种情况下,将使用正确的重载:

return View((object)id);

答案 1 :(得分:1)

它表明问题已经解决了。

您也可以尝试以下方法来解决问题。

public ActionResult Edit(string id)
{
    return View("ViewName", id);
}

通过提供视图名称,它将转到正确的页面。