Frage

Wenn ich versuche, eine Teilansicht, dessen Modelltypen zu machen ist wie folgt angegeben:

@model dynamic

durch den folgenden Code:

@{Html.RenderPartial("PartialView", Model.UserProfile);}

ich die folgende Ausnahme erhalten:

'System.Web.Mvc.HtmlHelper<dynamic>' has no applicable method named 'RenderPartial' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

Allerdings funktioniert der gleiche Code in einer ASPX-Datei einwandfrei. Irgendwelche Gedanken?

War es hilfreich?

Lösung

gefunden einfach die Antwort, scheint es, dass die Ansicht, wo ich den RenderPartial Code wurde, indem ein dynamisches Modell hatte, und somit konnte MVC die richtige Methode zur Nutzung nicht zur Verfügung. Gießen Sie das Modell in der RenderPartial Aufruf an den richtigen Typ das Problem behoben.

Quelle: Mit Html.RenderPartial () in ascx Dateien

Andere Tipps

Anstatt das Modell in dem RenderPartial Anruf Gießen, und da Sie Rasierer verwenden, können Sie die erste Zeile in der Ansicht von

ändern
@model dynamic

@model YourNamespace.YourModelType

Dies hat den Vorteil der Arbeit an jedem @Html.Partial Anruf Sie in der Ansicht haben, und gibt Ihnen auch Intellisense für die Eigenschaften.

Auch als aufgerufen werden

@Html.Partial("_PartialView", (ModelClass)View.Data)

Es gibt einen weiteren Grund, dass dies geworfen werden kann, auch wenn Sie nicht dynamisch / ExpandoObject verwenden. Wenn Sie eine Schleife tun, wie folgt aus:

@foreach (var folder in ViewBag.RootFolder.ChildFolders.ToList())
{
    @Html.Partial("ContentFolderTreeViewItems", folder)
}

In diesem Fall wird die „var“ anstelle der Typdeklaration der gleichen Fehler werfen, trotz der Tatsache, dass RootFolder vom Typ „Folder ist. Durch die var auf die tatsächliche Art zu ändern, das Problem verschwindet.

@foreach (ContentFolder folder in ViewBag.RootFolder.ChildFolders.ToList())
{
    @Html.Partial("ContentFolderTreeViewItems", folder)
}

Hier ist ein Weg, um ein dynamisches Objekt zu einer Ansicht zu übergeben (oder Teilansicht)

Fügen Sie die folgende Klasse überall in Ihrer Lösung (Verwendung System-Namespace, so dass sie bereit, ohne verwenden alle Verweise hinzuzufügen) -

    namespace System
    {
        public static class ExpandoHelper
        {
            public static ExpandoObject ToExpando(this object anonymousObject)
            {
                IDictionary<string, object> anonymousDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(anonymousObject);
                IDictionary<string, object> expando = new ExpandoObject();
                foreach (var item in anonymousDictionary)
                    expando.Add(item);
                return (ExpandoObject)expando;
            }

        }
    }

Wenn Sie das Modell zur Ansicht schicken, wandelt es in Expando:

    return View(new {x=4, y=6}.ToExpando());

Prost

Ich hatte das gleiche Problem und in meinem Fall ist das, was ich tat

@Html.Partial("~/Views/Cabinets/_List.cshtml", (List<Shop>)ViewBag.cabinets)

und in Teilansicht

@foreach (Shop cabinet in Model)
{
    //...
}

Ich habe das Spiel mit C # -Code ein fand ich versehentlich die Lösung für Ihr Problem haha ??

Dies ist der Code für die Hauptansicht:

`@model dynamic 
 @Html.Partial("_Partial", Model as IDictionary<string, object>)`

Dann in der Teilansicht:

`@model dynamic 
 @if (Model != null) { 
   foreach (var item in Model) 
   { 
    <div>@item.text</div> 
   } 
  }`

Es funktionierte für mich, ich hoffe, dies wird Ihnen helfen, auch !!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top