以MVC3为例,了解MVC的运行原理。
从核心的控制器下手,先进行了简单的测试:
public string Browse(string title) { string message = HttpUtility.HtmlEncode("store.browse.title=" + title); return message; } public string Test(int id) { string message = "the id is" + id.ToString(); return message; }
第一个方法接受一个title的字符串参数,结果返回title的内容到页面上。
第二个方法接受一个id的参数,结果也输出id
调用时发现这样的特点:
localhost:xxxx/store/Browse?title=123 这时会输出123到页面上。
localhost:xxxx/store/Test?id=456 和localhost:xxxx/store/Test/456 都会输出456到页面上。
由此可知,
1.controller中的参数会以查询字符串的形式接收url中的参数值。
2.localhost:xxxx/store/Test/456 会以默认路由规则把456当做id的参数进行处理
路由配置如下:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults );
关于视图。
视图中可以定义一些动态变量,以@开头,在controller中可以给这些动态变量赋值,进行数据传递。
如:
<h2>@ViewBag.Message</h2> <p> @ViewBag.Test To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. </p>
public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; ViewBag.Test = "wangjue test"; ViewData["Test"] = "wangjue test"; return View(); }
为了防止视图中变量的二义性,可以使用()将变量部分括起来。
如果要输出@,需要用两个@来进行转义。
在视图中定义的变量内容为html或脚本时,默认输出的转义后的字符串文本,不会执行脚本,想要执行脚本,可以使用@Html.raw(str)方法。
在razor代码块中混合纯文本的方法:
@if(true){
<text>this is a text</text>
}
可以采用text标签,标签不会输出,输出的是标签中的文字。
注释使用@* *@
使用泛型的时候必须用圆括号括起来(因为泛型使用尖括号,引起歧义)