cshtml(错误)页面中的剃刀代码产生错误

时间:2012-01-14 00:08:52

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

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

  

运行时错误

     

描述:服务器上发生了应用程序错误。目前   此应用程序的自定义错误设置会阻止详细信息   查看应用程序错误。

     

详细信息:要启用此特定错误消息的详细信息   在本地服务器机器上可以查看,请创建一个   位于根目录中的“web.config”配置文件中的标记   当前Web应用程序的目录。这个标签   然后应将其“mode”属性设置为“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.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。

     

请求的网址:/ CityPage / Navigation / Search

这是来自网络配置的价值

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

1 个答案:

答案 0 :(得分:4)

您不应该尝试直接呈现.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>