MVC學習小結[數據綁定和分頁]
一、項目搭建完成後,在控制器裏邊寫入方法:例如
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>
MVC學習小結[數據綁定和分頁]