【原创】关于MVC自己新建的 action,Controller提示找不到页面的问题

一.实例:

1.比如我自己新建了一个~/view/Shop  文件夹下的IndexShop.aspx,那么在Controllers文件夹下就要对应一个ShopController.cs的Controller类。

2.而在 Global.asax中就要新建一条:

routes.MapRoute(
name: "Shop",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Shop", action = "IndexShop", id = UrlParameter.Optional }
);

3.也非常重要,就是要在ShopController.cs里面 所有的action方法中将 return View()方法中的参数传递为自己新建的.aspx的字符串,如例子就是传递为

public ActionResult IndexShop()
{
return View("IndexShop");
}

二.原理

(一)定位

1.路由配置:

在MVC中,路由负责确定由哪个控制器操作来处理特定的URL请求。默认的MVC项目添加了一个通用的路由,它使用以下URL习惯来解析特定的URL请求,即分三个部分,包括在大括号内:{Controller}/{action}/{id}

注册路由使用的扩展方法是MapRoute(),在程序启动的时候注册(在App_Start/RouteConfig.cs文件里),例如:

routes.MapRoute(
                                name: "Default",//路由名称
                                url: "{controller}/{action}/{id}",//URL参数
                                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }//默认的URL各个参数值参数值
                            );

1.定位控制器

在ASP.NET MVC中,系统会使用“惯例优先”的原则,当应用程序启动时,ASP.NET MVC会在程序集里查找所有可用的控制器,这些控制器类都继承自System.Web.Mvc.IController接口或者她的子类,并且名字带有”Controller”后缀,当路由器框架确定需要访问的控制器后,它就会去掉后缀,来获取控制器类的名称。所以当需要使用Contrller时,直接使用它去掉”Controller”后缀之后的名字即可,比如AuctionsController指的控制器类是Auctions,而HomeController指的就是”Home”。

2.定位视图

ASP.NET MVC依赖惯例是在网站根目录下面的Views文件夹查找这个视图文件,更确切地说,ASP.NET MVC希望视图文件放在以他们对应的控制器名字命名的文件夹中。

因此,如果MVC框架想为HomeController的Index操作显示视图,那么它就要在/Views/Home文件夹下查找名为Index的文件。如果在Views文件夹没有找到对应Controller名字的文件夹,或者在这个文件夹下面没有找到对应的视图文件,MVC框架就会继续在/Views/Shared文件夹里查找。

时间: 2024-08-10 00:06:43

【原创】关于MVC自己新建的 action,Controller提示找不到页面的问题的相关文章

Spring MVC-控制器(Controller)-多动作控制器(Multi Action Controller)示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_multiactioncontroller.htm 说明:示例基于Spring MVC 4.1.6. 以下示例说明如何使用Spring Web MVC框架使用Multi Action Controller.MultiActionController类有助于分别在单个控制器中将多个URL与其方法映射. package com.tutorialspoint; import javax

adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决

adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决 在ubuntu14.04下,搭建Android开发环境,下载官方的adt-bundle-linux-x86_64-20131030后.启动eclipse,新建一个项目.提示找不到"R"文件,即R文件未成.启动模拟器提示"...Cannot run program "/home/zenail/adt-bundle-linux-x86_64-20

Asp.Net MVC 权限控制(三):Controller和Action级别控制

续接上篇:Asp.Net MVC 权限控制(二):Controller级别控制 再次在重构!这次对Controller和Action进行验证. 思路:系统有很多功能集,功能集对应很多Controller和Action,角色分配很多功能集. 首先构建一个基础数据: 1.功能集初始化: /// <summary> /// 系统模块 /// </summary> public class SystemModule { public SystemModule() { this.ID = G

[MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)

      之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类后重写OnActionExecuting方法,在RegisterGlobalFilters方法中注册新建的Filter类,之后直接在需要验证的Action前加上Filter标记即可. 1. 新建登陆校验类CheckLoginAttribute using System.Web.Mvc; namespace P

ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)

原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处理一些逻辑.为了支持这个.ASP.NET MVC同意你创建action过滤器.Action过滤器是自己定义的Attributes.用来标记加入Action方法之前或者Action方法之后的行为到控制器类中的Action方法中. 一些可能用到Action过滤器的地方有: 日志,异常处理 身份验证和授权

Asp.Net MVC 权限控制(二):Controller级别控制

续接上篇:Asp.Net MVC 权限控制(一):使用 Authorize Roles 简单实现 由于直接在Controller上标记角色名有很大的局限性,所以本示例使用 ActionFilterAttribute 进行权限拦截. 首先创建三类标记: 1. 匿名访问标记(AnonymousAttribute)2. 登录用户访问标记(LoginAllowViewAttribute)3. 权限验证访问标记(PermissionPageAttribute) 最重要的一个权限拦截:AuthorizeFi

asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别

转载自 :  <asp.net mvc @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction区别> 先复制过来.. 带Render的方法返回值是void,在方法内部进行输出:不带Render的返回值类型为MvcHtmlString,是一个字符串. Partial和RenderPartial:直接加载视图文件内容:Action和RenderAction:重新执行一次Controller→Model→View的顺序,然后

MVC 拦截指定的action

有时,我们需要在特定的一些aciton中做校验.比如:验证是否登录.实现方式有两种: 一.编写一个公共的方法专门用于实现是否登录的验证,然后在每个需要进行验证的aciton的头部去调用该方法,根据方法的返回值做进一步处理 二.定义一个特性类,在特性类中去判断当前是否登录.然后在需要验证登录的aciton上加入定义的特性 本文主要说下如何实现第二种方式. 1.定义一个特性类,使之继承System.Web.Mvc.FilterAttribute, System.Web.Mvc.IActionFilt

Core开发-MVC 使用dotnet 命令创建Controller和View

NET Core开发-MVC 使用dotnet 命令创建Controller和View 使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使用yo 来创建Controller和View. 下面来了解dotnet 命令来创建Controller和View,功能更加强大,更加完整. 结合VS Code 使你能跨平台更好更快速的开发 ASP.NET Core MVC. 也就可以在 Linux 和Mac 中更好的开发ASP.NET Core 应用程