Extension methods cannot be dynamically dispatched

Solution 1:

You are using dynamic types in extension methods, which is not supported.

Cast the dynamic types to actual types, and it will work.

From what I see now, I'd say:

(string) ViewBag.MagNo

Which would result in

@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" })   
}

Solution 2:

My fix for this problem was to add:

    @model MyModel

At the top of the partial control. I had forgotten it.

Solution 3:

To expand on the subject of MVC extension methods (which is how I ran across this question), I like to use Dapper's connection.Query() syntax which will return results as an IEnumerable<dynamic>.

It is also possible to use dynamic objects by:

  • Calling the static method directly, per Jon Skeet's answer:

    @model IEnumerable<dynamic>
    
    @PartialExtensions.Partial(Html, "~/link/to/_partialView.cshtml", Model)
    
  • Wrapping it in a class.

    public class DynamicQueryResult
    {
        public dynamic QueryResults {get; set;}
    }
    

    Then in your MVC View:

    @model Namespace.DynamicQueryResult
    
    @Html.Partial("~/link/to/_partialView.cshtml", Model)