Html.DropDownListFor Verwirrung

Kann mir jemand bitte helfen zu verstehen, wie die Html.DropDownListFor funktioniert? Ich habe ein Modell, das wie folgt ist

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

Der Aufruf von DropDownListFor, der wie folgt aussieht:

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

Mit dieser Einstellung stelle ich fest, dass die Dropdown-Liste korrekt ausgefüllt ist, aber nach dem Absenden des Formulars kann ich das ausgewählte Element scheinbar nicht abrufen. Auch von dem, was ich gelesen habe, sollte der Aufruf von Html.DropDownListFor eigentlich so aussehen:

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

Tatsächlich sehen auch andere Teile des Codes so aus, aber wenn ich das tue, wird die Dropdown-Liste nicht gefüllt. Vermisse ich hier etwas?

Ein paar Randnotizen: 1) Das Auffüllen dieser Dropdown-Liste erfolgt nach Auswahl eines Werts aus einer anderen Dropdown-Liste, sodass ich einen AJAX-Aufruf durch Aufrufen von getJSON durchführe, um Daten aus der Datenbank abzurufen. 2) Die Anwendung ist eine MVC-Anwendung.

Würde mich über jede Hilfe freuen. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen, um diese Frage zu beantworten.

Bearbeiten: Hier sind einige weitere Details

Dies ist die Aktionsmethode im Controller, mit der die Daten für das Dropdown-Menü abgerufen werden.

[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);
    }

Und dies ist der JQuery-Aufruf der Aktion im Controller

$("#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
                            }));
                        });
                    }
                });
    });

Es ist diese $ .each-Schleife, die nicht verwendet wird, wenn ich model => model.Product verwende, obwohl Daten in den variablen Daten @ zurückgegeben werde

Antworten auf die Frage(2)

Ihre Antwort auf die Frage