2014-03-31 113 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()',它会显示每个模型属性,无法隐藏特定的属性? –