从布局重定向到索引/导航而不加载页面

时间:2015-11-16 10:52:26

标签: c# asp.net-mvc entity-framework redirect asp.net-mvc-5

在控制器中没有任何操作方法,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没有问题,因为其他控制器中的类似重定向正在工作

1 个答案:

答案 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(...);

但这会产生忽略您可能想要路由的任何物理文件的副作用。但是,嘿,至少它现在有效。

结论:只需重命名您的控制器即可。它不那么痛苦。