1、MVC执行顺序
MVC在底层和传统的asp.net是一致的,在底层之上,相关流程如下:
1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteConfig.RegisterRoutes(RouteTable.Routes); 来注册路由规则。
2)RouteConfig.RegisterRoutes()方法里,给出的默认规则为{controller}/{action}/306378 .
a. 在有特别需要的时候,到这里来修改规则。
b. 未指明Controller默认为HomeContoller,未指定Action默认为Index, 也就是说,直接访问站点时,会默认导航到HomeController下的Index Action.
c. Action后跟的内容会被映射为名为id的参数。 比如: User/Delete/1 会匹配到 UserController的 Delete(int id) 方法。
d. Action分为[HttpGet]和[HttpPost]两种,与HTTP的GET和POST方式对应。 即直接请求的URL只会匹配[HttpGet]方法,而未注明[HttpPost]的方法即默认为[HttpGet]. Post的Action一般会有一个Model参数,MVC会自动将表单里的数据按约定的规则填充到Model实体对象里。 这个约定的规则,就是表单的Name与属性名称有个对应规则。
3)MVC负责按上述规则将执行流程导入合适的Action中,即Controller的某个方法中。
4)Action中,可以直接返回字符串,输出到浏览器, 也可以返回到ActionResult对象, 该对象指向一个View页面,并且附带了一些属性作为传递数据的容器。
2、MVC中如何设置路由指定默认页
MVC中怎么设置默认页,在webform中 只要右键设置起始页就可以,但MVC中却没有这个功能,其实MVC更简单
如下:
Login是控制器,Index 是动作 在全局Global.asax中改动下即可
这个是针对area的默认页
namespaces:默认页的命名空间
DataTokens:该area的键值对
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/306378",
defaults: new { controller = "Index", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcWeb.Areas.Members.Controllers" }
).DataTokens.Add("Area", "Members");
[MVC4]App_Start/RouteConfig 原内容
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/306378",
new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
3、MVC中Golbal配置多个routes.MapRoute有什么作用
读取不同的路由Url,实现不同类型的方法 ,程序先经过路由解析然后分配到特定的Controller 以及 Action 中 ,在网上搜一下路由的详解,学好mvc首先要学好路由规则
4、关于MVC中多级文件夹路由设置问题
routes.MapRoute(
"test", // 路由名称
"Admin/Manage/MemberManage/BaseInfo/306378",
new { controller = "MemberManage", action = "BaseInfo", id = UrlParameter.Optional }
);
比如你的请求是Admin/Manage/MemberManage/BaseInfo/1
它会在你定义好的route表里找出匹配的,然后根据你定义的controller,action去查找视图
[action]
/Controllers/MemberManageController - > BaseInfo
[view]
~/Views/{controller}/{action}.aspx
5、请教MVC中RouteCollection.RouteExistingFiles属性的问题
RouteCollection.RouteExistingFiles属性默认为false,该值指示 ASP.NET 路由操作是否应处理与现有文件匹配的URL。
可是我做了下面的测试,却可以访问到磁盘文件,请教原因:
用VS2010新建了一个MVC的程序,程序中不写任何代码,然后向解决方案中添加一个名为aa的文件夹,然后在这个文件夹中添加一个名为b.xml的xml文件(xml文件中的内容随便写点什么).
运行程序后,在地址栏中输入http://localhost:12448/aa/b.xml,可以访问到这个xml文件的内容
6、MVC 路由重写二级域名怎么实现
你的设计思路错了。
控制器是使用依赖注入方式来实现的,不要在控制器中使用构造函数。
这种情况可以改用过滤器来实现。
7、请教个基础问题,MVC Route中的一语句
routes.Add(new Route("{action}/306378", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "", action = "", id = "" }),
Constraints = new RouteValueDictionary { { "id", @"\d+" } }
});
这是在Global中定义一个URL规则,相信已经有许多人用过,标红的这句是添加一个id为数字时才匹配的约束,我的问题是 new RouteValueDictionary { { "id", @"\d+" } } 这句是啥语法 new Class{ {"", ""} }
这是RouteValueDictionary的构造方法:
public RouteValueDictionary();
public RouteValueDictionary(IDictionary<string, object> dictionary);
public RouteValueDictionary(object values);
protected RouteValueDictionary(SerializationInfo info, StreamingContext context);
8、asp.net mvc5中如何路由跳转另一个路由并传参?
//这是路由规则 可以默认用id 传值
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/306378",
defaults: new { controller = "Login", action = "UserLogin", id = UrlParameter.Optional }
);
window.location.href = "/Load/Index" + '/' + 10; //这个是跳转页面 填你自己的,后面那个10 就是你要传的参数值
在A2 那个控制器中 public ActionResult Index(string id) { }
写一个参数 string id ;你就可以取到 那个值 10
9、asp.net MVC URL Routing问题 关于routes.MapRoute()方法的参数问题
必须要{controller}/{action}的,其他的参数不要求。你说的参数可以这么写:
{controller}/{action}/{a}-{b}-{c}..... ,明白?另外最后一部分是倒着解析的,如:
规则{controller}/{action}/{a}-{b}-{c},一个url是 user/center/1-2-3-4,解析结果为controller=user,action=center,c=4,b=3,a=1-2;明白吧?
10、mvc路由接收URL数据的几种方法
url:www.xxx.com/show/3
www.xxx.com/show?id=3
路由:
routes:MapRoute(
"test",
"show/306378",
new {controller="proct",action="show",id=urlParameter.Optional}
);
控制器类
public ActionResult show()
{
var id=RouteDate.Values["id"] ?? (Request.QueryString["id"] ?? String.Empty);
//或者使用ValueProvider,注意ValueProvider对参数大小写有要求。
var id2=ValueProvider.GetValue("id").AttemptedValue ?? String.Empty
}