Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在404上的其他控制器中执行操作_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 在404上的其他控制器中执行操作

Asp.net mvc 在404上的其他控制器中执行操作,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我试图返回驻留在“错误”控制器中的操作“PageNotFound” public class BaseController : Controller { public BaseController() { } public BaseController(IContentRepository contentRep, ILocalizedRepository localRep) { this._localRep = localRep; this._contentRep =

我试图返回驻留在“错误”控制器中的操作“PageNotFound”

public class BaseController : Controller
{
 public BaseController()
 {
 }

 public BaseController(IContentRepository contentRep, ILocalizedRepository localRep)
 {
    this._localRep = localRep;
    this._contentRep = contentRep;
 }

 protected new HttpNotFoundResult HttpNotFound(string statusDescription = null)
 {
    return new HttpNotFoundResult(statusDescription);
 }

protected HttpUnauthorizedResult HttpUnauthorized(string statusDescription = null)
{
    return new HttpUnauthorizedResult(statusDescription);
}

 protected class HttpNotFoundResult : HttpStatusCodeResult
 {
    public HttpNotFoundResult() : this(null) { }

    public HttpNotFoundResult(string statusDescription) : base(404, statusDescription) { }
 }

 protected class HttpUnauthorizedResult : HttpStatusCodeResult
 {
    public HttpUnauthorizedResult(string statusDescription) : base(401, statusDescription) { }
 }

 protected class HttpStatusCodeResult : ViewResult
 {
    public int StatusCode { get; private set; }
    public string StatusDescription { get; private set; }

    public HttpStatusCodeResult(int statusCode) : this(statusCode, null) { }

    public HttpStatusCodeResult(int statusCode, string statusDescription)
    {
        this.StatusCode = statusCode;
        this.StatusDescription = statusDescription;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        context.HttpContext.Response.StatusCode = this.StatusCode;
        if (this.StatusDescription != null)
        {
            context.HttpContext.Response.StatusDescription = this.StatusDescription;
        }

        this.ViewName = "PageNotFound";  // CONTROLLER MISSING
        this.ViewBag.Message = context.HttpContext.Response.StatusDescription;
        base.ExecuteResult(context);
     }
 }

我如何修改它,使其在“错误”-控制器中返回“PageNotFound”操作?

A
ViewResult
应该直接渲染视图(可以选择传递模型和布局)。此过程中没有控制器

如果要通过控制器,则需要执行重定向,即使用
redirectoroutesult
而不是
ViewResult


在您的示例中,您直接在其他控制器中使用此自定义ViewResult。因此,这将是渲染错误视图的控制器。

A
ViewResult
应该直接渲染视图(可以选择传递模型和布局)。此过程中没有控制器

如果要通过控制器,则需要执行重定向,即使用
redirectoroutesult
而不是
ViewResult

在您的示例中,您直接在其他控制器中使用此自定义ViewResult。因此,这将是呈现错误视图的控制器。

您尝试过吗

return RedirectToAction("PageNotFound", "ControllerName");
你试过了吗

return RedirectToAction("PageNotFound", "ControllerName");

我不明白你为什么要重定向。我会返回404

return HttpStatusCode(404);

然后使用这里描述的方法:渲染正确的视图。优点:您的url仍然相同,更易于错误处理和浏览器历史记录。

我不明白您为什么要重定向。我会返回404

return HttpStatusCode(404);

然后使用这里描述的方法:渲染正确的视图。优点:您的url仍然是相同的,更易于错误处理和浏览器历史记录。

既然我不能在无效函数中返回新的RedirectToRouteResult(?),我应该如何实现这一点?在这种情况下,您的基类应该是
RedirectToRouteResult
,而不是
ViewResult
。然后,在调用基本构造函数时,您将有可能传递操作和控制器的值。既然我不能在一个无效函数中返回新的RedirectToRouteResult(?),我应该如何实现这一点?在这种情况下,您的基类应该是
RedirectToRouteResult
,而不是
ViewResult
。然后,在调用基本构造函数时,可以传递操作和控制器的值。