MVC 视图搜索和字符串 id

MVC View Search and string id

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

我的 url 看起来像这样:

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

动作看起来像这样:

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

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

我的路由配置如下所示:

        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 }
        );

这是错误:

The view 'fsdfsdsdfsdfff' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Profile/fsdfsdsdfsdfff.cshtml ~/Views/Profile/fsdfsdsdfsdfff.vbhtml ~/Views/Shared/fsdfsdsdfsdfff.cshtml ~/Views/Shared/fsdfsdsdfsdfff.vbhtml

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

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

return View(id);

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

为了解决这个问题,您应该将字符串参数转换为对象,在这种情况下将使用正确的重载:

return View((object)id);

说明问题已经解决

您也可以像下面这样尝试解决问题。

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

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