我发现了一些我不明白的奇怪行为。我的表的主键是一个字符串,因此我使用字符串作为我的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,它工作正常。是什么给了什么?
答案 0 :(得分:2)
这不是路由问题,这是查找视图的问题。当你打电话
return View(id);
您实际上正在调用一个方法,其中parameter是一个视图名称。使用int
参数时,您不会遇到此问题,因为它没有带有单个整数参数的重载。
为了解决这个问题,你应该将string参数转换为object,在这种情况下,将使用正确的重载:
return View((object)id);
答案 1 :(得分:1)
它表明问题已经解决了。
您也可以尝试以下方法来解决问题。
public ActionResult Edit(string id)
{
return View("ViewName", id);
}
通过提供视图名称,它将转到正确的页面。