MVC几种找不到资源的问题解决办法
2014-07-15 11:51
363 查看
在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)]
当不对应时,有以下几种情况发生:
一、找不到视图的错误
请求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)]
相关文章推荐
- MVC几种找不到资源的问题解决办法
- ASP.NET MVC几种找不到资源的问题解决办法
- MVC几种找不到资源的问题解决办法
- MVC几种找不到资源的解决方式
- MVC几种找不到资源的解决方式
- Android 问题之找不到资源解决办法
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
- No mapping found for HTTP request with URI 找不到图片或者其他的静态资源问题解决办法
- WPF 一种资源找不到的问题的解决办法
- NIS配置,ypbind找不到NIS Server问题的解决办法
- 关于VS调试时出现的找不到可执行文件问题的可能的解决办法
- Java 本地化 Locale 资源包 PropertyResourceBundle 找不到资源包问题解决
- Java Mail开发问题---BASE64Encoder报错:"找不到该类所在的jar包!" 解决办法
- 公式不计算等几种常见问题的解决办法
- 解决Android找不到资源问题
- 我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题,error C2471--解决办法
- 安装IE8在控制面板里面删除之后进不去桌面,提示找不到-IESetting.dll 解决办法(解决IE8卸载不了的问题,返回IE7 ,返回IE6),从IE8回到IE7的方法.
- Windows下的 Fedora LiveUSB Creator 找不到 7z 的问题及解决办法
- Struts2.0乱码问题的几种解决办法
- vc++6源码在VC2010中编译提示iostream.h库找不到问题的解决办法