Search code examples
vb.netasp.net-mvc-3webgrid

Webview giving Column Does not Exist Error


I am using

  • MVC 3
  • VB.NET and
  • Razor ViewEngine.

I am playing around with WebGrid in my application and it is telling me "failEmList" does not exist.

Below is the code from the calling Function, the View, and the part of the model that it is getting the data from.

FailEmailSends is just a List(of string) and has lines with single entries of email Addresses.

  Dim vm As New MassEmailVM
  For Each _fail In failEmailSends
      vm.failEmList.Add(_fail)
  Next
  ViewBag.succCount = succCount.ToString
  ViewBag.failECount = failEmailCount.ToString
  Return View(vm)

View is as follows:

@Modeltype xxxxxxxxxxxxx
@Code
ViewData("Title") = "Mass Emails Sent"

End Code


<table>
<tr><th>Total Sent</th><td>@ViewBag.succCount</td></tr>
<tr><th>Total Fail</th><td>@ViewBag.failECount</td></tr>
<tr><th>Fail Email Addresses</th></tr>
</table>

@code
Dim grid = New WebGrid(Model.failEmList)

End Code


<div id="grid">
@grid.GetHtml(
tableStyle:="grid",
headerStyle:="head",
alternatingRowStyle:="alt",
columns:=grid.Columns(
    grid.Column("failEmList", "Email List")
    ))
</div>

Relevant part of view Model:

Private _failEmList As New List(Of String)
Public Property failEmList() As List(Of String)
    Get
        Return _failEmList
    End Get
    Set(ByVal value As List(Of String))
        _failEmList = value
    End Set
End Property

Any ideas why this is throwing the following error:

  System.InvalidOperationException was unhandled by user code
  Message=Column "failEmList" does not exist.
  Source=System.Web.Helpers
  StackTrace:
   at System.Web.Helpers.WebGridRow.get_Item(String name)
   at System.Web.Helpers.WebGrid.GetTableBodyHtml(IEnumerable`1 columns, String rowStyle, String alternatingRowStyle, String selectedRowStyle)
   at System.Web.Helpers.WebGrid.Table(String tableStyle, String headerStyle, String footerStyle, String rowStyle, String alternatingRowStyle, String selectedRowStyle, String caption, Boolean displayHeader, Boolean fillEmptyRows, String emptyRowCellValue, IEnumerable`1 columns, IEnumerable`1 exclusions, Func`2 footer, Object htmlAttributes)
   at System.Web.Helpers.WebGrid.GetHtml(String tableStyle, String headerStyle, String footerStyle, String rowStyle, String alternatingRowStyle, String selectedRowStyle, String caption, Boolean displayHeader, Boolean fillEmptyRows, String emptyRowCellValue, IEnumerable`1 columns, IEnumerable`1 exclusions, WebGridPagerModes mode, String firstText, String previousText, String nextText, String lastText, Int32 numericLinksCount, Object htmlAttributes)
   at ASP._Page_Views_Admin_MassEmailsSent_vbhtml.Execute() in C:\Users\Skindeep\Documents\Visual Studio 2010\Projects\xxxxxxxxxx\Views\Admin\MassEmailsSent.vbhtml:line 21
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.StartPage.RunPage()
   at System.Web.WebPages.StartPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   InnerException: 

Solution

  • You may try the following:

    @Code
        Dim grid = New WebGrid(Model.failEmList)
    End Code
    
    <div id="grid">
        @grid.GetHtml(
            tableStyle:= "grid",
            headerStyle:= "head",
            alternatingRowStyle:= "alt",
            columns:= grid.Columns(
                grid.Column(format:= Function(item) item, header:= "Email List")
            )
        )
    </div>