【问题标题】:Redirect to Index / Navigation from Layout not loading page从布局重定向到索引/导航未加载页面
【发布时间】:2015-11-16 10:52:25
【问题描述】:

在我的控制器中的任何操作方法中,RedirectToAction("Index") 都不起作用。但在其他控制器中,RedirectToAction(Index) 正在工作。当我给出 URL 时:Localhost:ControllerName 它没有被重定向,并给我一个错误页面,说明

找不到资源。

我无法仅使用控制器名称导航到索引页面。我还尝试了RedirectToAction("Index","ControllerName"),它也不起作用。

我的其他控制器工作时也有类似的情况。我的控制器的名字是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 没有问题,因为其他控制器中的类似重定向正在工作

【问题讨论】:

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


    【解决方案1】:

    这是一个级联问题,(在我看来)不值得麻烦。 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(...);
    

    不过,这样做的副作用是忽略您可能希望路由的任何物理文件。但是,嘿,至少现在可以了。

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

    【讨论】:

    • 是的。我已经更改了我的控制器的名称。它解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多