我想在MVC WebGrid中有一个列作为行号.我该怎么做?
解决方法
您可以使用包含指示行号的属性的视图模型.
假设您有以下域模型:
public class DomainModel { public string Foo { get; set; } }
现在,您构建一个与视图要求相对应的视图模型:
public class Myviewmodel { public int RowNumber { get; set; } public string Foo { get; set; } }
接着:
public ActionResult Index() { // fetch the domain model from somewhere var domain = Enumerable.Range(1,5).Select(x => new DomainModel { Foo = "foo " + x }); // now build the view model // TODO: use AutoMapper to perform this mapping var model = domain.Select((element,index) => new Myviewmodel { RowNumber = index + 1,Foo = element.Foo }); return View(model); }
现在,您的视图将成为视图模型的强类型:
@model IEnumerable<Myviewmodel> @{ var grid = new WebGrid(Model); } @grid.GetHtml( columns: grid.Columns( grid.Column("RowNumber"),grid.Column("Foo") ) )
现在让我们假设你出于某些愚蠢的原因不想使用视图模型.在这种情况下,如果您愿意,可以将视图转换为意大利面条代码:
@model IEnumerable<DomainModel> @{ var grid = new WebGrid(Model.Select((element,index) => new { element,index })); } @grid.GetHtml( columns: grid.Columns( grid.Column("RowNumber",format: item => item.index + 1),grid.Column("Foo",format: item => item.element.Foo) ) )