【问题标题】:Razor code in cshtml (error) page produce errorcshtml(错误)页面中的 Razor 代码产生错误
【发布时间】:2012-02-10 03:35:46
【问题描述】:

我从应用程序中抛出 404 错误。
404 错误的页面位于 /ErrorPages/Error_404.cshtml 在这个文件中,我只有 HTML 代码,它工作正常。
但是如果我添加一些剃须刀代码,它会在浏览器中引发配置错误。
我添加例如 layout 或一些 @Html.ActionLink(...
这是错误:

运行时错误

描述:服务器上出现应用程序错误。目前的 此应用程序的自定义错误设置阻止了 被查看的应用程序错误。

详细信息:启用此特定错误消息的详细信息 可在本地服务器计算机上查看,请创建一个 位于根目录中的“web.config”配置文件中的标记 当前 Web 应用程序的目录。这个标签 然后应该将其“模式”属性设置为“RemoteOnly”。启用 要在远程机器上查看的详细信息,请将“模式”设置为 “关”。

这就是我产生 404 的方式:

public ActionResult Search(string searchTerm)
{
if (city == null)
            {
                throw new HttpException(404, "Some description");               
            }
            else
            {
                return RedirectToAction("Index", "Home", new
                {...
            }
}

当错误页面中没有剃须刀代码时,它可以工作,如果没有,我会从上面收到消息。
当我在 web config 'mode=Off' 中设置时,我收到错误消息:

描述:HTTP 404。您正在寻找的资源(或其之一 依赖项)可能已被删除,名称已更改,或者是 暂时不可用。请查看以下 URL 并制作 确保拼写正确。

请求的 URL:/CityPage/Navigation/Search

这是来自网络配置的值

<customErrors mode="Off">
      <error statusCode="404" redirect="\ErrorPages\Error_cp404.cshtml" />
    </customErrors>

【问题讨论】:

  • 在 web.config 中将自定义错误设置为 Off 并告诉我们实际的错误消息。
  • @Judo 如果他关闭了自定义错误,系统将不会呈现他的错误消息页面,而是显示默认的异常堆栈。 1110,您应该调试该页面并向我们显示实际错误
  • 我根据您的 cmets 更新了我的问题。

标签: asp.net-mvc asp.net-mvc-3 razor http-status-code-404


【解决方案1】:

您不应该尝试直接呈现.cshtml 页面。这些是 Razor 的观点。在 ASP.NET MVC 中,视图是通过控制器操作提供的。

所以:

<error statusCode="404" redirect="Errors/Error404" />

你可以有一个 ErrorsController:

public class ErrorsController: Controller
{
    public ActionResult Error404()
    {
        return View();
    }
}

您也可以查看following answer 以了解处理错误的替代方法。

如果您在 IIS7+ 中运行,您可能还需要添加以下内容:

<system.webServer>
    ...
    <httpErrors errorMode="Detailed" />
</system.webServer>

【讨论】:

  • 您在链接中的回答提供了解决问题的方法。谢谢。我认为剃须刀页面可以在没有控制器类的情况下工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多