type - extension method c#




Erweiterungsmethoden können nicht dynamisch ausgelöst werden (2)

Ich möchte DropDownListFor in MVC haben

@foreach (var item in Model)
{
    @Html.DropDownListFor(modelItem => item.TitleIds, new SelectList(ViewBag.TitleNames as System.Collections.IEnumerable, "TitleId", "Title.TitleText"), "No: " + ViewBag.MagNo, new { id = "TitleIds" })   
}

im Controller

public ActionResult ArticleList(int id)
{
    ArticleWriter_ViewModel viewModel = new ArticleWriter_ViewModel();
    Func<IQueryable<NumberTitle>, IOrderedQueryable<NumberTitle>> orderByFunc = null;
    Expression<Func<NumberTitle, bool>> filterExpr = null;
    if (id > 0)
    {
        filterExpr = p => p.MagazineId.Equals(id);
    }
    var wholeTitles = unitOfWork.NumberTitleRepository.Get(filterExpr,  orderByFunc, "Magazine,Title").ToList();          

    ViewBag.MagNo = wholeTitles[0].Magazine.MagNo.ToString();
    ViewBag.MagId = wholeTitles[0].Magazine.Id;
    ViewBag.TitleNames = wholeTitles;

    return View("../Panel/Magazine/ArticleList", "_BasicLayout", viewModel);
}

aber ich bekomme diesen Fehler

' System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Cinemavaadabiat.ViewModel.ArticleWriter_ViewModel>> ' hat keine anwendbare Methode mit dem Namen ' DropDownListFor ', scheint aber eine Erweiterungsmethode mit diesem Namen zu haben. Erweiterungsmethoden können nicht dynamisch ausgelöst werden. Ziehen Sie in Erwägung, die dynamischen Argumente zu übergeben oder die Erweiterungsmethode ohne die Syntax der Erweiterungsmethode aufzurufen.

Ich kann den Fehler nicht verstehen, was soll ich prüfen?


Meine Lösung für dieses Problem war hinzuzufügen:

    @model MyModel

An der Spitze der Teilkontrolle. Ich hatte es vergessen.


Sie verwenden dynamische Typen in Erweiterungsmethoden, die nicht unterstützt werden.

Übergeben Sie die dynamischen Typen an tatsächliche Typen, und es wird funktionieren.

Von dem, was ich jetzt sehe, würde ich sagen:

(string) ViewBag.MagNo

Was würde dazu führen

@foreach (var item in Model)
{
    @Html.DropDownListFor(modelItem => item.TitleIds, 
       new SelectList(ViewBag.TitleNames as System.Collections.IEnumerable, 
       "TitleId", "Title.TitleText"), 
       "No: " + (string) ViewBag.MagNo, 
       new { id = "TitleIds" })   
}