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);
}
通过提供视图名称,它将转到正确的页面。
我发生了一些我不明白的奇怪行为。 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);
}
通过提供视图名称,它将转到正确的页面。