List<string> returns as System.Collections.Generic.List on HttpPost wiht MVC
<p>I have a Web App written in MVC5 which passes a List of an Object(which contains many items) to a Page and renders successfully.  I have a button on the form that forces a Post back.  When I click the button the model appears to re-initialise the List of Objects, rather than return what was is on the Page.</p>

<p>I have read various posts on SO that cover similar issues that have made many suggestion like ensuring every item in the Object is on the form (at least hidden).  Tried many of the options, but so far haven't been successful in solving my issue.</p>

<p>I decided to go back to basics on it, and created a very simple View Model with a List.  This again renders ok, but when returned it as System.Collections.Generic.List.</p>

<p><strong>View Model</strong></p>

<pre><code>public class TestVm
{
    public List&lt;string&gt; CustomerNames { get; set; }
}
</code></pre>

<p><strong>Controller</strong></p>

<pre><code>public ActionResult Index()
{
    TestVm testmodel = new TestVm();

    testmodel.CustomerNames = new List&lt;string&gt;();
    testmodel.CustomerNames.Add("HELP");
    testmodel.CustomerNames.Add("Its");
    testmodel.CustomerNames.Add("Not");
    testmodel.CustomerNames.Add("Working");
    return View(testmodel); 
}

[HttpPost]
public ActionResult Index(TestVm model)
{
    // DO SOME WORK HERE WITH RETURNED model
    return View(model);
}
</code></pre>

<p><strong>View</strong></p>

<pre><code>@model WebApplication1.Models.TestVm
@{
    Layout = null;
}
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta name="viewport" content="width=device-width" /&gt;
    &lt;title&gt;View&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

@using (Html.BeginForm("Index", "Test", Model, FormMethod.Post, new { @class = "form-horizontal" }))
{
    &lt;button name="submit" type="submit" value="Refresh" class="btn btn-sm btn-default pull-right"&gt;Refresh&lt;/button&gt;
}
&lt;div&gt;
@if (Model.CustomerNames != null)
{

&lt;table&gt;
    &lt;thead&gt;
    &lt;tr&gt;
        &lt;td class="text-center"&gt;CustomerName&lt;/td&gt;
    &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
    @for (int i = 0; i &lt; Model.CustomerNames.Count(); i++)
    {
        &lt;tr&gt;
            &lt;td class="text-center"&gt;@Html.EditorFor(m =&gt; m.CustomerNames[i])&lt;/td&gt;
            &lt;/tr&gt;
        }
        &lt;/tbody&gt;
        &lt;tfoot&gt;
        &lt;/tfoot&gt;
    &lt;/table&gt;
}
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>I thought creating a simple app like this would help me understand and solve my issue.  But I can't work out why the model in the HttpPost contains "System.Collections.Generic.List", rather than the actual list of string that I would expect.</p>

<p><strong>Initial Loadup</strong>
<a href="http://i.stack.imgur.com/PV6lR.png" rel="nofollow">Page when loaded up the first time</a></p>

<p><strong>After Refresh</strong></p>

<p><a href="http://i.stack.imgur.com/FTAVI.png" rel="nofollow">Page after I clicked Refresh</a></p>