I am implementing the PaginatedList from the tutorial.
It works. My issue if that if I defined the @model as an IEnumerable in my Razor page I can do this:
@model IEnumerable
@Html.DisplayNameFor(model => model.LastName)
If I define @model as List, the @Html.DisplayNameFor helper works differently, and I have to call it like this:
@model List
@Html.DisplayNameFor(model => model.First().LastName)
Difference being that in the first call the expression cast model to be CustomerDisplayViewModel and in the second it is a List.
The issue is caused by the compiler prefering to cast the call to
Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper
string DisplayNameFor(Expression> expression);
Instead of
Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions
public static string DisplayNameFor(
this IHtmlHelper> htmlHelper, Expression> expression);
I know I can use my workaround (@Html.DisplayNameFor( model => model.First().LastName)) but it doesn't feel correct.
Is there a way to cast the call or maybe generating my own extension that calls the IEnumerable extension (I would prefer to not create an extension from scratch, this call should work exactly as the IEnumerable). I can create the extension method with List<>, however, I haven't been able to cast it.
public static string DisplayNameFor
(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper> htmlHelper,
Expression> expression)
{
var castHelper = --- somehow cast helper to IHtmlHelper
return castHelper.DisplayNameFor(expression);
}
Thanks.