在控制器中没有任何操作方法,RedirectToAction("Index")
正在运行。但在其他控制器中RedirectToAction(Index)
正在运行。当我提供网址时:Localhost:ControllerName
它没有被重定向,并且给我一个错误页面,说明
无法找到资源。
我无法单独使用控制器名称导航到索引页面。我也尝试了RedirectToAction("Index","ControllerName")
,但也没有。
我的其他控制器工作方式类似。我的COntroller的名字是ViewsController
。这会对我Redirect
的工作产生影响吗?
索引
public ActionResult Index()
{
return View(db.Views.ToList());
}
创建名为RedirectToAction
的名称
public ActionResult Create([Bind(Include = "ViewsID,ViewsName,DescriptionEN,DescriptionDE")] Views views)
{
if (ModelState.IsValid)
{
db.Views.Add(views);
db.SaveChanges();
return RedirectToAction("Index","Views");
}
return View(views);
}
即使在我的布局中
@Html.ActionLink("Views", "Index", "Views")
无效。
导致重定向无法运行的原因。我想我的RouteConfig没有问题,因为其他控制器中的类似重定向正在工作
答案 0 :(得分:3)
这是一个级联问题,并且(在我看来)不值得麻烦。 Views
是项目中包含所有.cshtml文件的文件夹。通过使用ViewsController
,您现在可以为其分配mvc路由,这意味着它与已分配的路由冲突。
问题是有一个特定的处理程序阻止您在Views/web.config
中导航。
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
我们所要做的就是删除它吗?错误。物理文件在MVC路由之前映射。因此,您(默认情况下)会获得一个很好的403 Forbidden,因为您正在尝试目录浏览。
要解决此问题,您可以使用Route.config中的RouteExistingFiles
选项。
routes.RouteExistingFiles = true;
routes.MapRoute(...);
但这会产生忽略您可能想要路由的任何物理文件的副作用。但是,嘿,至少它现在有效。
结论:只需重命名您的控制器即可。它不那么痛苦。