2011-12-13 48 views
2

我使用剃须刀内联模板来定义网格列格式。ASP.net MVC:如何在代码中定义剃须刀内联模板?

enter image description here

这项工作巨大的,如果你要定义一个Razor视图内联模板。

如何在控制器的代码中执行相同的操作(用列表模板定义列列表)?

+2

为什么在控制器中?我仍将ColumnModels定义保留在ViewModel中,然后发出网格。当然,ViewModel由控制器设置。编辑:操作,误解了这个问题,对不起。今天咖啡因仍然很低( – BigMike

+0

Eduardo,MVC模式的设计和实现,使得只有视图知道用户界面的细节,控制器不应该知道你正在使用网格,网格列,按钮或任何... –

+0

Davide:我很感谢你的关注,我在说控制器,并以网格作为简化问题的示例,我正在制作的解决方案比这更复杂顺便说一句,你知道答案吗? –

回答

3

以下是示例代码。您还可以使用this获取查看代码。另请参阅this用于扩展网格,

public class HomeController : Controller 
{ 
    public class Employee 
    { 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public int Price { get; set; } 
    } 
    public ActionResult Index() 
    { 
     var myClasses = new List<Employee>{ 
      new Employee { Name="A" , Price=1, Description="A A"}, 
      new Employee { Name="B" , Price=2, Description="B B"}, 
      new Employee { Name="C" , Price=3, Description="C C"}}; 

     var grid = new WebGrid(source: myClasses); 
     var html = grid.GetHtml(
      columns: grid.Columns(
       grid.Column("Name", "Product", style: "product"), 
       grid.Column("Description", format: item => new System.Web.WebPages.HelperResult(writer => 
       { 
        WriteLiteralTo(writer, "<i>"); 
        WriteTo(writer, item.Description); 
        WriteLiteralTo(writer, "</i>"); 
       })), 
       grid.Column("Price", format: item => new System.Web.WebPages.HelperResult(wrtier => 
       { 
        WriteLiteralTo(wrtier, "$"); 
        WriteTo(wrtier, item.Price); 
       })) 
      ) 
     ); 
     return View(); 
    } 

    private void WriteLiteralTo(TextWriter writer, object content) 
    { 
     writer.Write(HttpUtility.HtmlEncode(content)); 
    } 

    public static void WriteTo(TextWriter writer, object content) 
    { 
     writer.Write(HttpUtility.HtmlEncode(content)); 
    } 

}