Html.DropDownList для путаницы

Может кто-нибудь помочь мне понять, как работает Html.DropDownListFor? У меня есть модель, которая выглядит следующим образом

public class TestModel
{
    public IList<SelectListItem> ProductNames { get; set; }
    public string Product { get; set; }
}

Вызов DropDownListFor, который выглядит как

@Html.DropDownListFor(model => model.ProductNames,  Model.ProductNames, "Select a Product", new {@class="selectproductname" })

С этой настройкой я обнаружил, что выпадающий список заполняется правильно, однако после отправки формы я не могу получить выбранный элемент. Также из того, что я прочитал, вызов Html.DropDownListFor должен выглядеть так:

@Html.DropDownListFor(model => model.Product,  Model.ProductNames, "Select a Product", new {@class="selectproductname" })

На самом деле другие части кода выглядят так же, но когда я делаю это, выпадающий список не заполняется. Я что-то здесь упускаю?

Несколько замечаний: 1) Заполнение этого раскрывающегося списка происходит после выбора значения из другого раскрывающегося списка, поэтому я выполняю AJAX-вызов, вызывая getJSON для получения данных из базы данных. 2) Приложение является приложением MVC.

Буду признателен за любую предложенную помощь. Дайте мне знать, если вам нужна другая информация, чтобы помочь ответить на этот вопрос

Изменить: вот еще несколько деталей

Это метод действия в контроллере, используемый для получения данных для выпадающего

[AcceptVerbs(HttpVerbs.Get)]
    public JsonResult LoadProductsBySupplier(string parentId)
    {
        var ctgy = this._categoryService.GetAllCategoriesByParentCategoryId(Convert.ToInt32(parentId));
        List<int> ctgyIds = new List<int>();

        foreach (Category c in ctgy)
        {
            ctgyIds.Add(c.Id);
        }

        var prods = this._productService.SearchProducts(categoryIds: ctgyIds, storeId: _storeContext.CurrentStore.Id, orderBy: ProductSortingEnum.NameAsc);

        products = prods.Select(m => new SelectListItem()
        {
            Value = m.Id.ToString(),
            Text = m.Name.Substring(m.Name.IndexOf(' ') + 1)
        });

        var p = products.ToList();
        p.Insert(0, new SelectListItem() { Value = "0", Text = "Select A Product" });
        products = p.AsEnumerable();
        //model.ProductNames = products.ToList();


        return Json(products, JsonRequestBehavior.AllowGet);
    }

И это вызов JQuery к действию в контроллере

$("#Supplier").change(function () {
        var pID = $(this).val();            
        $.getJSON("CoaLookup/LoadProductsBySupplier", { parentId: pID },
                function (data) {
                    var select = $("#ProductNames");
                    select.empty();
                    if (pID != "0") {
                        $.each(data, function (index, itemData) {
                            select.append($('<option/>', {
                                value: itemData.Value,
                                text: itemData.Text
                            }));
                        });
                    }
                });
    });

Именно этот цикл $ .each не вводится, когда я использую модель => модель. Продукт, даже если данные возвращаются в переменных данных

Ответы на вопрос(2)

Ваш ответ на вопрос