MVC 3のwebgridページング

3747 ワード

Model:
 
    public class Genre
    {
        public int GenreId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public List Albums { get; set; }
    }
 
 
    public class Artist
    {
        public int ArtistId { get; set; }
        public string Name { get; set; }
    }
 
 
 
    [Bind(Exclude="AlbumId")]
    public class Album
    {
        [ScaffoldColumn(false)]
        public int AlbumId { get; set; }
        [DisplayName("Genre")]
        public int GenreId { get; set; }
        [DisplayName("Artist")]
        public int ArtistId { get; set; }
        [Required(ErrorMessage="An Album Title is requested")]
        [StringLength(160)]
        public string Title { get; set; }
        [Required(ErrorMessage="Price is requested")]
[Range(0.00100.00,ErrorMessage=「価格は0.00から100.00の間でなければなりません」)]
        public decimal Price { get; set; }
        [DisplayName("Album Art Url")]
        [StringLength(1024)]
        public string AlbumArtUrl { get; set; }
        public virtual Genre Genre { get; set; }
        public virtual Artist Artist { get; set; }
    }
 
Controllerでデータを取得するには:
 
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
            return View(albums.ToList());
GenreとArtistはインラインオブジェクトです
 
Viewは次のとおりです.
 
@model IEnumerable@{    ViewBag.Title = "Index";}

    Index

    @Html.ActionLink("Create New", "Create")

@{    var grid = new WebGrid(source: Model, fieldNamePrefix: "", defaultSort: "Genre", canPage: true, canSort: true, ajaxUpdateContainerId: "DivGrid", pageFieldName: "paging", sortFieldName: "Artist", rowsPerPage: 20);}
    @grid.GetHtml(columns:grid.Columns(
grid.Column("Genre", "Genre", format: item=>item.Genre.Name,canSort:true),grid.Column("Artist", "Artist", format: item=>item.Artist.Name,canSort:true),grid.Column("Title", "Title", format: @@item.Title),grid.Column("Price", "Price", format: @@item.Price),    grid.Column("", "", format:@ @Html.ActionLink("Edit", "Edit", new { id = item.AlbumId }) |    @Html.ActionLink("Details", "Details", new { id = item.AlbumId }) |    @Html.ActionLink("Delete","Delete",new{id=item.AlbumId})))))

総ページ数:@grid.PageCount|各ページ:@grid.RowsPerPage行|現在@(grid.PageIndex+1)ページ



カラムGenreとArtistをクリックすると、ソート効果はありませんが、リフレッシュはありますが、デフォルトのデータビューを取得します.生成されたHTMLコードを見てみましょう
 
<th scope="col"><a href="#" onclick="$('#DivGrid').load('/storemanager?Artist=Genre&amp;sortdir=ASC&amp;__=634697837603269528 #DivGrid');">Genre</a></th>

赤いのはソートされた列のパラメータが見えますが、Albumでは、この属性はありません.GenreをGenreに変更する必要があります.Nameだけです.
だからViewでは、この2行を修正しなければなりません.
 
grid.Column("
Genre.Name", "Genre", format: item=>item.Genre.Name,canSort:true),
grid.Column("
Artist.Name", "Artist", format: item=>item.Artist.Name,canSort:true),
OK、今列の先頭をクリックして並べ替えられます