1. 程式人生 > >MVC學習小結[數據綁定和分頁]

MVC學習小結[數據綁定和分頁]

string類 ring desc 寫上 etl 三個參數 跳轉 失效 循環

一、項目搭建完成後,在控制器裏邊寫入方法:例如

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學習小結[數據綁定和分頁]