一、项目搭建完成后,在控制器里边写入方法:例如
public ActionResult Index(){
var model=new Product(){id=1,name="产品一"};
return View(model);
}
二、根据这个方法创建视图:
可以右键点击方法里边任意位置,添加视图,或者在Views里边手动创建。
三、这两部比较简单,主要是数据绑定,这里主要说一下:
1.在视图上绑定数据,一般使用 ViewBag,ViewData,TempData等
ViewBag可以直接定义需要的变量和数据。在视图页面可以直接使用。无需类型转换。例如:方法里写入:ViewBag.aa = "测试数据一"; 视图直接使用@ViewBag.aa即可
ViewData一般传递对象时,在视图页需要类型转换和非空判断。传递一般数据直接使用即可。例如:方法里写入:ViewData["ee"] = "测试数据二";视图直接使用@ViewData["ee"]即可
TempData主要用于页面跳转的传递数据,如果您想从a页面传一个值到b,再从b到c,在c页面使用。这里注意,如果TempData的值用过了,则失效了,只能用一次,传递对象也需要类型转换和非空判断。使用方法和 ViewData一样。
2.如果方法返回一个对象,则需要加个类型转换,比如:
在试图页面加上@model Product ,然后页面才可以使用,使用的时候:用@Model.name即可
如果有循环,则需要用@if(集合!=null&&集合.Count>0){ @foreach(var item in 集合){ //这里写上html并绑定数据 }}
在使用时有时候想在类里边输入内容:可以这样写:<div class="aa @Html.Raw("active")"></div> 这样就加了一个active类,@Html.Raw()是原样输出内容
如果您想获取一个bool类型,或者string类型,如果直接用@Model.Param.Name获取值,有时候会出错哦,原样输出后修改一下。你可以这样:
string类型加一个引号: var name= "@Html.Raw(@Model.Param.Name)"; bool类型重写一下: var isDesc = @Html.Raw(Model.Param.IsDesc? "true" : "false");
3.也面路径地址绑定方法:@Url.Action(“方法名”,“控制器名”,new {id=1}),第三个参数非必选。
4.如果您想在母版页上绑定数据,一般需要在当前控制器上先继承一个baseController,baseController再继承Controller ,在baseController里边写上需要的数据,使用ViewBag传递,由于是继承了baseController,所以每一个方法都会经过这个ViewBag,所以母版页可以直接使用。如果您不这样,您需要在每一个方法里写上ViewBag.这里需要注意的是:baseController里边写ViewBag的时候必须写在Controller可以重写的方法里边,不然没用。
5.如果你把所有的样式和js放在首页可以能导致名称相同出现各种样式问题。那么您需要把单个页面对应的js和css放到单独的那个页面。怎么写呢,看下边例子:
在母版页写上:@RenderSection("name", required) 这里的两个参数有必要说一下,第一个自己随便定一个名字标识,第二个就是说是否必须在子页面重写,true或false
比如:母版: @RenderSection("style", false) 子页面:@section style{ 里边把需要的样式拉过来即可 }
6.这里写一个小技巧,如果在页面上需要使用传递的参数,可以在方法里直接把参数赋值到返回视图的对象上。
四、这里写一下mvc上使用的一个分页,使用的是mvcPager
1. 由于这个分页需要使用PageList<Product>,所以在创建类的时候把需要分页的部分用PageList<Product>,比如:
public class Model{
public string Type{get;set;}
public string Name{get;set;}
public PageList<Product> GoodsList{get;set;}
}
2.由于是分页,必须传递一个页码,所以方法要这样写:
public ActionResult GetList(int pageIndex = 1){
Model model=new Model();
int size = 10;//每页10条
int offset = (pageIndex - 1) * 10 + 1; //每页开始索引
var list = goodsBll.Where(m => m.Status == 1).Orderby(“AddTime”).ToList(offset, size + offset - 1);
int AllCount=goodsBll.Where(m => m.Status == 1).AllCount();//获取总条数
model.GoodsList = new PagedList<Goods>(list , pageIndex, size, AllCount);//后边四个参数,第一个集合,第二个页码,第三个每页条数,第四个总条数
return View(model);
}
3.视图页面:首先要把类型转换一下 @model Model
在需要分页的地方把数据循环绑定之后,加上下边的代码即可:
<div class="goods_list_container">
@if (Model.GoodsList != null)
{
foreach (var item in @Model.GoodsList)
{
<i class="bold"> @item.Name </i>
}
}
<div class="text-right">
@Html.Pager(Model.GoodsList, new PagerOptions { PageIndexParameterName = "pageIndex", PrevPageText = "上页", NextPageText = "下页", FirstPageText = "首页", LastPageText = "尾页", CssClass = "pagination", PagerItemsSeperator = "", CurrentPagerItemWrapperFormatString = "<li class=\"active\"><a href=\"#\">{0}</a></li>", PagerItemWrapperFormatString = "<li>{0}</li>" })
</div>
</div>