ASP.NET MVC Framework體驗(2):顯示列表資料

來源:互聯網
上載者:User
概述

ASP.NET WebForm下,顯示列表資料,經常會使用伺服器控制項GridView、DataList等。在ASP.NET MVC Framework中,我們有兩種方式進行顯示資料,一是使用行內代碼,即通過迴圈視圖資料使用<%=%>標記進行呈現;二是使用伺服器控制項,同樣可以把視圖資料繫結在伺服器控制項,如ASP.NET 3.5中的新控制項ListView。

準備資料訪問

這裡我們顯示一個Post的列表DataContext和實體定義如下:

[Database(Name="Blog")]public class BlogDataContext : DataContext{    public BlogDataContext()        : base(@"Server=.\Sql2005;User Id=sa;Password=;Database=Blog")    {             }    public Table<Post> Posts    {        get        {            return this.GetTable<Post>();        }    }}
Post實體:
[Table(Name="Posts")]public class Post{    [Column(IsPrimaryKey=true,IsDbGenerated = true)]    public int Id    {        get; set;    }    [Column]    public string Title    {        get; set;    }    [Column]    public string Author    {        get; set;    }    [Column]    public DateTime PubDate    {        get; set;    }    [Column]    public string Description    {        get; set;    }}

同時,我們定義一個BlogRepository類,用於讀取Post資料,這樣可以使得Controller中代碼更加優雅,不再涉及資料訪問:

public class BlogRepository{    public List<Post> GetAll()    {        BlogDataContext db = new BlogDataContext();        IEnumerable<Post> posts = from p in db.Posts                    orderby p.PubDate                    select p;        return posts.ToList<Post>();    }}
定義Controller

這裡的Controller定義就非常簡單了,擷取所有Post資料,然後把資料傳給視圖

public class BlogController : Controller{    [ControllerAction]    public void Index()    {        // 擷取所有post資料        BlogRepository repository = new BlogRepository();        List<Post> posts = repository.GetAll();        // 轉向視圖Index,顯示Post列表        RenderView("Index", posts);    }}
定義View

添加一個Index視圖,並使其繼承於ViewPage<List<Post>>。

1.使用行內代碼顯示,進行資料的迴圈並使用ViewPage提供的HtmlHelper方法。

<h3>1.使用行內代碼</h3>    <%=Html.ActionLink("Home", new { action="Index"})%> |    <div>        <%foreach (Post post in ViewData)          { %>        <div class="postitem">            <strong>Title</strong>:<%=Html.Encode(post.Title) %></br>            <strong>Author</strong>:<%=Html.Encode(post.Author) %></br>            <strong>PubDate</strong>:<%=Html.Encode(post.PubDate.ToShortDateString()) %></br>            <strong>Content</strong>:<%=Html.Encode(post.Description) %></br>        </div><br />        <% } %>    </div>

在HTML代碼中編寫時VS2008同樣提供了很好的智能提示功能:

 

2.使用伺服器控制項ListView,編寫代碼如下:

<h3>使用ListView控制項</h3>    <asp:ListView ID="ListView1" runat="server">        <LayoutTemplate>              <div>                     <asp:PlaceHolder ID="itemPlaceHolder" Runat="server"/>             </div>        </LayoutTemplate>        <ItemTemplate>            <div class="postitem">            <strong>Title</strong>:<%# Eval("Title") %></</br>            <strong>Author</strong>:<%# Eval("Author")%></br>            <strong>PubDate</strong>:<%# Eval("PubDate")%></br>            <strong>Content</strong>:<%# Eval("Description") %></br>        </div><br />        </ItemTemplate>    </asp:ListView>

在後台代碼中進行ListView的資料繫結,這裡僅僅是對把視圖資料繫結到了ListView上面,從資料庫中擷取資料交給Controller去做。

public partial class Views_Blog_Index : ViewPage<List<Post>>{    protected void Page_Load(object sender, EventArgs e)    {        this.ListView1.DataSource = ViewData;        this.ListView1.DataBind();    }}
設定直接選取

同樣我們需要進行直接選取的設定

void Application_Start(object sender, EventArgs e) {    // Code that runs on application startup    RouteTable.Routes.Add(                new Route                {                    Url = "[controller]/[action].mvc",                    Defaults = new { action = "Index" },                    RouteHandler = typeof(MvcRouteHandler)                });}

完成後,運行可以看到,使用行內代碼和ListView控制項的效果是一樣的

結束語

在文章結束時,順便說一下,好多朋友都問為什麼有了WebForm,還要再出一個ASP.NET MVC Framework,對於這個問題,建議大家閱讀一下這篇文章What's Ailing ASP.NET Web Forms。

範例程式碼下載:/Files/Terrylee/MVCDemo02.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.