zoukankan      html  css  js  c++  java
  • MVC几种找不到资源的问题解决办法

    在MVC中,controller中的Action和View中的.cshtml文件名称有一个对应的关系。

    当不对应时,有以下几种情况发生:

    一、找不到视图的错误

    请求URL:http://localhost:13850/Customer/Create

    controller中有对应的Action:

    View中没有相应的视图

    报错信息:

    解决方式:在View中添加相应的View

    二、找不到资源:

    请求的URL:http://localhost:13850/Customer/Index

    controller里没有相应的Action(有时候可能是在开发一段时间以后,修改了Action的名字,却没有相应的修改View的名字,但是请求的URL依然还是原来的导致的)

    View里有相应的视图

    错误信息:

    解决方式,就是指定一个固定的“页”,在找不到资源时显示。具体如下:

    Asp.Net MVC中的controller都是集成自Controller这个抽象类,在这个类中,定义了一个HandleUnknownAction 方法,左右就是在发生HTTP 404时,进行处理。

    那么,我们可以在自己的controller里重写这个方法。

    这样,在每次找不到相应的Action时,都能执行这个方法。去调用相应的View。

    微软提供的方式是:

    protected override void HandleUnknownAction(string actionName)

     {    

        try {        

            this.View(actionName).ExecuteResult(this.ControllerContext);    

          } catch (InvalidOperationException ieox )

          {        

             ViewData["error"] = "Unknown Action: \"" +Server.HtmlEncode(actionName) + "\"";        

             ViewData["exMessage"] = ieox.Message;        

             this.View("Error").ExecuteResult(this.ControllerContext);    

          }

    }

    也就是,输出错误页。

    当然这也存在一个隐患,如果出现下面【三】的情况时,也就是只声明了一个HTTP.Post的方法,没有相应的Http.Get的同名方法,也能把通过这种方式,把页面加载出来。

    怎么解决呢?答案就是:直接Response.Redirect("/",true),回到首页。

    三、找不到资源:

    请求URL:http://localhost:13850/Customer/Details

    controller中的对应Action,定义为HTTP Post,且没有对应的Http Get的Action

    View中有对应的视图

    报错信息:

    解决方式:加入一个同名Action,定义为HTTP GET:[AcceptVerbs(HttpVerbs.Get)]

  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/xyang/p/2262003.html
Copyright © 2011-2022 走看看