Didn’t find this in any easily searchable place, so here’s one for reference. Consider a scenario where you’re binding a templated control to an IEnumerable<string> object. In my case, I needed to display a list of the keys in my cache.

protected void Page_Load(object sender, EventArgs e)
   if (!IsPostBack)
      lvwKeys.DataSource = AllCacheKeys();

private IEnumerable<string> AllCacheKeys()
IDictionaryEnumerator enumerator = HttpContext.Current.Cache.GetEnumerator();
while (enumerator.MoveNext())
yield return enumerator.Key.ToString();

So how do I reference the string values in my template? <%#Eval(“xyz”) %> expects xyz to be the property of the object being bound to, but a simple string has no property for its value. I’ve seen <%#Eval(“.”) %> suggested else place where . is supposed to refer to the object as whole, but this does not work here. Instead, we must use <%# Container.DataItem %> to refer to the object itself.

<asp:ListView runat="server" ID="lvwKeys">
      <table class="form">
            <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
         <td><%# Container.DataItem %></td>

Indeed, this the way to approach binding IEnumerable<T> where T is any value type – int, double, bool, etc. Container.DataItem returns the string representation of the value you are binding to. In the case of bool, it renders True and False.

Hope that helps. Happy coding!