2014-03-31 109 views
2

我是MVC應用程序開發新手,嘗試使用MVC Grid組件。如該鏈路示出,我有用戶模型:使用MVC Grid組件的無效參數組件?

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using PROJECT.Helper; 

namespace PROJECT.Models 
{ 
    public class Users 
    { 
     public int Id { get; set; } 

     [Required] 
     [Display(Name = "Email")] 
     [DataType(DataType.EmailAddress)] 
     public string Email { get; set; } 

     [Required] 
     [Display(Name = "Password")] 
     [DataType(DataType.Password)] 
     public string Password { get; set; } 

     [Display(Name = "Name")] 
     public string Name { get; set; } 

     [Display(Name = "Forum Username")] 
     public string ForumUsername { get; set; } 

     [Display(Name = "Last Date Visited")] 
     public DateTime LastVisitDate { get; set; } 

     public Boolean RememberMe { get; set; } 

     public int? OrganizationId { get; set; } 

     [Display(Name="Position")] 
     public string Position { get; set; } 

     [Display(Name = "Profile Picture")] 
     public string ProfilePictureSrc { get; set; } 

     //[DataType(DataType.PhoneNumber)] 
     [DisplayFormat(DataFormatString = "{0:(###) ###-####}", ApplyFormatInEditMode = true)] 
     public string PhoneNumber { get; set; } 

     public virtual string ProfilePictureUrl 
     { 
      get 
      { 

       //TODO: update the folder when it isn't null to the blob location 
       if (this.ProfilePictureSrc == null) 
       { 
        return "/Content/Images/userThumb.png"; 
       } 
       else 
       { 
        BlobHelper helper = new BlobHelper(); 
        string url = helper.getImageUrl(this.ProfilePictureSrc, "profilepicture"); 

        return url; 
       } 
      } 
     } 
    } 
} 

接着我有控制器(〜/控制器/ AdminController.cs):

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using PROJECT.Models; 
using PROJECT.DAL; 
using System.IO; 
using PROJECT.Helper; 
using PagedList; 

namespace PRISM.Controllers 
{ 
    [CustomizedAuthorizeAttribute] 
    public class AdminController : Controller 
    { 
     private ProjectContext db = new ProjectContext(); 
     private static string profPicBlobContainer = "ProfilePicture"; 
     private BlobHelper blobHelper = new BlobHelper(); 

     // 
     // GET: /Admin/ 
     public ActionResult ViewUsers() 
     { 
      return View(db.Users.ToList()); 
     } 
    } 
} 

然而,當我加載達(本地主機:12345 /管理/ ViewUsers)我收到:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0411: The type arguments for method 'GridMvc.Html.GridExtensions.Grid<T>(System.Web.Mvc.HtmlHelper, System.Collections.Generic.IEnumerable<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 


Line 9: @using GridMvc.Html 
Line 10: 
Line 11: @Html.Grid(Model).Columns(columns => 
Line 12:   { 
Line 13:     //columns.Add().Titled("Custom column title").SetWidth(110); 


Source File: c:\ME\Project\Project\Views\Admin\ViewUsers.cshtml Line: 11 

〜/查看/管理/ ViewUsers.cs:

@using GridMvc.Html 
@model PROJECT.Models.Users 

@{ 
    ViewBag.Title = "View Users"; 
    Layout = "~/Views/Shared/_LayoutAdmin.cshtml"; 
} 

@using GridMvc.Html 

@Html.Grid(Model).Columns(columns => 
      { 
       //columns.Add().Titled("Custom column title").SetWidth(110); 
       columns.Add(Model.Name).Sortable(true); 
      }).WithPaging(20) 

盡我所知道的,我不是爲了它來訪問個別型號提供了一個正確的「模型」收集到MVC網格物業等

任何人有我想怎麼解決這個想法?鏈接的例子是我迄今爲止唯一能找到的例子。


編輯:

我得到的視圖通過在頂部作爲IEnum指定它呈現(如下所示)。

現在,在我的第一個@Html.Grid(Model)部分中,我可以聲明特定的列以及設置其各自的網格屬性。在第二部分@Html.Grid(Model).AutoGenerateColumns()中,我使用GridColumn Annotation來指定屬性,然後AutoGenerateColumns()按照模型中所列的降序正確地拉入它們。

1問題我與AutoGenerateColumns()雖然是我無法弄清楚如何隱藏特定的模型屬性,我不希望顯示。任何人對此有任何想法?如果可能的話,我很樂意使用AutoGenerateColumns()來減少編碼,並且能夠編輯我的模型中的所有內容。

EDIT2:使用[NotMappedColumn]網格數據註釋找到答案。 Link

@using GridMvc.Html 
@model IEnumerable<PROJECT.Models.Users> 

@{ 
    ViewBag.Title = "View Users"; 
    Layout = "~/Views/Shared/_LayoutAdmin.cshtml"; 
} 

@using GridMvc.Html 

@Html.Grid(Model).Columns(columns => 
      { 
       columns.Add().Encoded(false).Sanitized(false).SetWidth(30).RenderValueAs(o => @Html.CheckBox("checked", false)); 
       columns.Add(foo => foo.Enabled).Titled("Enabled").SetWidth(50).Sortable(true); 
       columns.Add(foo => foo.Name).Titled("Name").SetWidth(100).Sortable(true); 
       columns.Add(foo => foo.Position).Titled("Position").SetWidth(50).Sortable(true); 
       columns.Add(foo => foo.Email).Titled("Email").SetWidth(100).Sortable(true); 
       columns.Add(foo => foo.PhoneNumber).Titled("Phone#").SetWidth(30).Sortable(true); 
       columns.Add(foo => foo.ForumUsername).Titled("Forum Username").SetWidth(50).Sortable(true); 
       columns.Add(foo => foo.RegisteredDate).Titled("Reg. Date").SetWidth(50).Sortable(true); 
       columns.Add(foo => foo.LastVisitDate).Titled("Last Visited").SetWidth(50).Sortable(true); 
       columns.Add(foo => foo.ReceiveSystemEmails).Titled("Rec. Sys Emails").SetWidth(50).Sortable(true); 
      }).WithPaging(5) 

@Html.Grid(Model).AutoGenerateColumns() 

〜/型號/用戶:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using PROJECT.Helper; 
using GridMvc.DataAnnotations; 

namespace PROJECT.Models 
{ 
    [GridTable(PagingEnabled = true, PageSize = 5)] 
    public class Users 
    { 
     public int Id { get; set; } 

     [Display(Name = "Enable User")] 
     [GridColumn(Title = "Enabled", SortEnabled = true, FilterEnabled = true, Width = "30")] 
     public bool Enabled { get; set; } 

     [Display(Name = "Name")] 
     [GridColumn(Title = "Name", SortEnabled = true, FilterEnabled = true, Width = "50")] 
     public string Name { get; set; } 

     [Display(Name = "Position")] 
     [GridColumn(Title = "Position", SortEnabled = true, FilterEnabled = true, Width = "50")] 
     public string Position { get; set; } 

     [Required] 
     [Display(Name = "Email")] 
     [DataType(DataType.EmailAddress)] 
     [GridColumn(Title = "Email", SortEnabled = true, FilterEnabled = true, Width = "80")] 
     public string Email { get; set; } 

     //[DataType(DataType.PhoneNumber)] 
     [DisplayFormat(DataFormatString = "{0:(###) ###-####}", ApplyFormatInEditMode = true)] 
     [GridColumn(Title = "Phone #", SortEnabled = true, FilterEnabled = true, Width = "40", Format = "{0:(###)-###-####}")] 
     public string PhoneNumber { get; set; } 

     [Display(Name = "Forum Username")] 
     [GridColumn(Title = "Forum Username", SortEnabled = true, FilterEnabled = true, Width = "30")] 
     public string ForumUsername { get; set; } 

     [GridColumn(Title = "Reg. Date", SortEnabled = true, FilterEnabled = true, Width = "40")] 
     public DateTime RegisteredDate { get; set; } 

     [Display(Name = "Last Date Visited")] 
     [GridColumn(Title = "Last Visited", SortEnabled = true, FilterEnabled = true, Width = "40")] 
     public DateTime LastVisitDate { get; set; } 

     [Display(Name = "Receive System Emails")] 
     [GridColumn(Title = "Rec. Sys Emails", SortEnabled = true, FilterEnabled = true, Width = "30")] 
     public bool ReceiveSystemEmails { get; set; } 

     [GridColumn(Title = "Remember User", SortEnabled = true, FilterEnabled = true, Width = "20")] 
     public Boolean RememberMe { get; set; } 

     [Required] 
     [Display(Name = "Password")] 
     [DataType(DataType.Password)] 
     public string Password { get; set; } 

     public int? OrganizationId { get; set; } 

     [Display(Name = "Profile Picture")] 
     [GridColumn(Title = "Profile Pic.", SortEnabled = true, FilterEnabled = true)] 
     public string ProfilePictureSrc { get; set; } 

     [ForeignKey("OrganizationId")] 
     public virtual MemberOrganizations Organization { get; set; } 

     public virtual SponsorOrganizations Sponsor { get; set; } 
     public virtual ICollection<UserRoles> Roles { get; set; } 

     public virtual string ProfilePictureUrl 
     { 
      get 
      { 

       //TODO: update the folder when it isn't null to the blob location 
       if (this.ProfilePictureSrc == null) 
       { 
        return "/Content/Images/userThumb.png"; 
       } 
       else 
       { 
        BlobHelper helper = new BlobHelper(); 
        string url = helper.getImageUrl(this.ProfilePictureSrc, "profilepicture"); 

        return url; 
       } 
      } 
     } 
    } 
} 

回答

2

你只傳遞用戶的單個實例成Html.Grid()。 Html.Grid()需要一個從IEnumerable繼承的參數。

此外,類用戶應該真的被稱爲用戶,因爲它只代表一個用戶。

這裏是你會做什麼,而不是一個例子:

@using GridMvc.Html 
@model List<PROJECT.Models.User> 

@{ 
    ViewBag.Title = "View Users"; 
    Layout = "~/Views/Shared/_LayoutAdmin.cshtml"; 
} 

@Html.Grid(Model).Columns(columns => 
{ 
    columns.Add(Model.Name).Sortable(true); 
}).WithPaging(20) 
+1

感謝您迴應!我將它設置爲一個IEnumerable(在Grid MVC網站的一個隨機討論頁面中找到它),它工作。現在我試圖解決一個新的行爲,詳見我的上面的編輯。 –

+0

你正在移動這個問題的目標職位。如果答案解決了您的問題,您應該將其標記爲答案。 AutoGenerateColumns不允許您隱藏任何列。 – schaefea

+0

對不起,將標題改回。所以如果我使用'AutoGenerateColumns()',它會顯示每個模型屬性,無法隱藏特定的屬性? –