最近开始接触Asp.net MVC, MVC即Model,Controller和View,通过看一些文档,明白了他的基本原理,这里保留下来作为笔记。
MVC通过配置url routing将web request导入到相应的controller类中,通过Controller/Action/id的格式撰写,这不同于webform或winform的防止,不可以直接在属性窗口中设置启动页面或窗体,你需要在Global文件中谁知routes的启动Action. 例如你的Controller类名为Ajax,Action为Index,那么在Global的RegisterRoutes方法中写入:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Ajax", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
你可以在Controller类中定义自己的Action,并通过Add View的方式添加对应的View,return View()将自动转入自己的View,如果你需要导入到其他的View中,使用RedirectToAction()方法,你也可以根据自己的需要设置参数。
View一般用于生成HTML代码, 你可以通过使用@字符写对应的语句(MVC3,MVC2应为<%%>),例子:
<ul>
@for (int i = 0; i < ViewBag.NumTimes; i++)
{
<li>ViewBag.Message</li>
}
</ul>
Model为实体类,你可以建立自己的实体,如果你有自己的实体类时,可以在创建View的时候通过选生成强类型的view, 这包括基本的template可供选择,如Create,delete,edit,detail等形式,具体在Add View的对话框里可以找到,有了Model, 你可以在controller类中自由的操作model的实例,你也可以在View中使用,不过使用前需要在View中声明,并且使用@HTML.DisplayFor,EditFor,LabelFor等方法建立你需要表现的形式
@model MvcApplication1.Models.Person
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Person</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
传值方式:
通过ViewData["a"]=a;
进行简单传值,声明周期为View的生命周期,也支持传向不同的Routes
通过ViewBag
可以接收类实体的形式传值,对应Action中使用ViewBag.a=model; View中使用@Viewbag.a.modelfield显示
通过View参数形式
return View(model)如上面的例子
通过Html.BeginForm的方式
你需要在接收页面使用Request["controlID"]接收
通过url Get传值
同难过使用url?a=a的形式传入,在对应Action中使用Request.QueryString["a"]方式接收