2011-06-17 31 views
4

我使用的是ASP.NET MVC 3 Mvccontrib格像这样:如何在Mvccontrib网格模型中使用自定义列?

@Html.Grid(Model).Columns(column => 
{ 
    column.For(x => x.UserId).Named("ID"); 
    column.For(x => x.Name); 
    column.Custom(@<div><img src='@item.ImageUrl' alt="@item.Name"/><a href="@item.Link">@item.Name</a></div>).Named("Name"); 
    column.For(x => x.Score).Named("Score"); 
}) 

但现在我需要把这个移动到一个自定义网格模型:

@Html.MvcContrib().Grid(Model).WithModel(new MyGridModel()).Sort(ViewData["sort"] as GridSortOptions).Attributes(id => "grid", style => "width: 100%;") 

与相应的网格模型:

public class MyGridModel : GridModel<MyModel> 
{ 
    public MyGridModel() 
    { 
    Column.For(x => x.UserId); 
    Column.For(x => x.Name); 
    Column.For(x => x.ImageUrl); 
    RenderUsing(new HtmlTableGridRenderer<MyModel>()); 
    } 
} 

但是我如何在我的网格模型中执行自定义列?
Column.Custom(???);

回答

4

尝试这样的:

public class MyGridModel : GridModel<MyModel> 
{ 
    public MyGridModel() 
    { 
     Column.For(x => x.UserId); 
     Column.For(x => x.Name); 
     Column.Custom(MyImage); 
     Column.For(x => x.Score); 
     RenderUsing(new HtmlTableGridRenderer<MyModel>()); 
    } 

    private static IHtmlString MyImage(MyModel model) 
    { 
     var div = new TagBuilder("div"); 
     var img = new TagBuilder("img"); 
     var a = new TagBuilder("a"); 
     img.Attributes["src"] = model.ImageUrl; 
     img.Attributes["alt"] = model.Name; 
     a.Attributes["href"] = model.Link; 
     a.SetInnerText(model.Name); 

     div.InnerHtml = string.Format(
      "{0}{1}", 
      img.ToString(TagRenderMode.SelfClosing), 
      a.ToString() 
     ); 

     return MvcHtmlString.Create(div.ToString()); 
    } 
} 
+0

大。快速,准确,工作和优雅。谢谢一堆。 –

相关问题