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)