2013-11-10 9 views
5

Ich benutze MVC 4 und wollte meine Ansichten ein wenig aufräumen so entschieden, mehrere Teilansichten zu erstellen und sie während des Renderings zusammenbringen.MVC4 mit verschachtelten @ Html.RenderPartial() wirft Compiler Fehlermeldung: CS1502

Dies funktioniert, wenn die zu rendernde Ansicht wenig @Html.RenderPartial('path\to\my\partialView.cshtml') hat, aber fehlschlägt, wenn diese partialView.cshtml wiederum @Html.RenderPartial('path\to\my\otherPartialView.cshtml') definiert ist.

ich bekomme Fehler wie mit entweder RenderPartial oder Partial Methode

error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments 
error CS1503: Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult' 

Gibt es eine Möglichkeit in MVC4 mit wir erreichen können, meine große Ansicht Markup-Dateien aufzuräumen? d.h. versuchen, die Teilansichten mit anderen Teilansichten progressiv zu erstellen.

EDIT

Nur mehr Details zu geben.

My Mobile Ansicht sieht wie folgt aus:

Datei: ManageLoads.Mobile.cshtml

Ort: Aussicht-> Shipper-> ManageLoads

innerhalb dieser Ansicht Ich habe Code wie folgt aus:

<div id="landingPage" ng-show="MenuSelection=='DefaultPage'"> 
      @Html.Partial("~/Views/Shipper/_DashboardPartial.cshtml") 
      <div class='message {{MessageClass}}'> 
     <i class='{{MessageIcon}}'></i> 
     <p>{{Message}}</p> 
      </div> 
     </div> 

dieser Teil funktioniert ohne Problem. jetzt innerhalb der _DashboardPartial.cshtml, wenn ich auf eine andere Teilansicht verweisen, schlägt es fehl.

<div id="warehouseSelection" ng-show="getStep()==1"> 
    {@Html.RenderPartial("~/Views/Shipper/mobilePartials/_MyWarehouse.cshtml");} 
</div> 

Dies bricht und wirft Fehler, aber wenn ich den Inhalt des „_MyWarehouse.cshtml“ kopieren und einfügen innen dort, es beginnt wieder zu arbeiten. Ich habe überprüft, dass der Pfad zu dem _MyWarehouse.cshtml korrekt ist, also vermutete ich, dass es etwas mit der Verschachtelung der RenderPartial-Methode zu tun hat, die das Problem verursacht.

Grüße Kiran

Antwort

16

Das erste Problem, das ich sehe, ist, dass Ihre Html.RenderPartial Syntax falsch ist. Die @ sollte wie so außerhalb der geschweiften Klammern sein:

@{Html.RenderPartial("~/Views/Shipper/mobilePartials/_MyWarehouse.cshtml");} 

Zweitens, ich frage mich, ob die Kombination von Html.Partial und Html.RenderPartial ist eine Frage hier verursacht. Verwenden Sie beide Html.RenderPartial mit der obigen Syntax, um zu sehen, ob das Ihren Fehler behebt.

+1

Du hast meinen Tag gemacht! Ich hatte in den letzten paar Tagen damit zu kämpfen gehabt, ohne zu verstehen, was geschah. Problem wurde mit dem @ an der falschen Stelle innerhalb {} platziert. Vielen Dank – Kiran

2

Sie haben mehrere Möglichkeiten, wie:

  • Verwendung custom html helpers (für kurze allgemeine HTML-Code);

  • Verwenden Sie RenderPartial oder RenderAction, wie es here heißt.

(Auch sollten Sie überlegen, wurzelt pathes verwenden wie '~/Views/someController/etc/to/my/partialView.cshtml' oder sogar Ihren Code teilweise gemeinsame Ansichten ‚~/Views/Gemeinsames Bewegen/.... "Aber das ist alles auf dich).

EDIT:

Bitte haben Sie einen Blick auf this article. Es erklärt, wie genau Sie die genannten Methoden verwenden sollten.Es muss vielmehr in einer solchen Art und Weise:

@{ Html.RenderPartial("ViewName"); } 

aber

@Html.Partial("ViewName") 
+0

Ich glaube nicht, dass ich Ihrem Kommentar folgen werde. Wenn ich diese Funktionen auf Teilansichten aufruft, die wiederum aus anderen Teilansichten aufgebaut sind, bekomme ich die Fehler. Ich arbeite, wenn ich die 2. Teilansicht in die 1. Teilansicht kopiere. – Kiran

+0

Ich habe '@ Html.Partial (...)' ohne Probleme verwendet. Gibt es einen genauen Grund, warum Sie RenderPartial verwenden? – Siim

+0

@Kiran Nur mehr Informationen in die Antwort hinzugefügt. – Agat

Verwandte Themen