我想在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)
- )
- )