2016-08-09 179 views
0

Ziemlich neu bei MVC, unterstützender Code, der im Allgemeinen funktioniert, aber übermäßige Serverfehler erzeugt. Die Server-Fehler in Form von:Abrufen einer InvalidOperationException für den Zugriff auf die Ansicht beim Versuch, auf die Controller-Funktion zuzugreifen

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: The view 'RenderProthyPDF' or its master was not  found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Portal/RenderProthyPDF.aspx 
~/Views/Portal/RenderProthyPDF.ascx 
~/Views/Shared/RenderProthyPDF.aspx 
~/Views/Shared/RenderProthyPDF.ascx 
~/Views/Portal/RenderProthyPDF.cshtml 
~/Views/Portal/RenderProthyPDF.vbhtml 
~/Views/Shared/RenderProthyPDF.cshtml 
~/Views/Shared/RenderProthyPDF.vbhtml 
    at System.Web.Mvc.ViewResult.FindView(ControllerContext context) 
    at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) 

jedoch ‚RenderProthyPDF ist keine Ansicht, sondern eine Funktion in einem Controller:

Beispiel Telefonvorwahl im cshtml:

<a class="document-link" href="javascript:markLastVisitedCaseDocument('@currentDocument.WorkingDocumentURL'); renderProthyPDF('@currentDocument.DktYear', '@currentDocument.DktSequence', '@currentDocument.WorkingDocumentURL');"> 

und

<a class="tile" style="height: 130px;" href="javascript:renderProthyPDF('@d.DktYear', '@d.DktSequence', '@d.URL');"> 

Die referenzierte javascript:

renderProthyPDF = function (rDktYear, rDktSequence, rURL) { 
    jQuery.ajax({ 
     async: false, 
     type: "POST", 
     url: '@Url.Action("RenderProthyPDF", "Portal")', 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     data: JSON.stringify({ Year : rDktYear, 
          Sequence : rDktSequence, 
        prothyDocumentURL : rURL 
     }), 
     success: function (data) { 
      alert(data); 
     }, 
     failure: function (errMsg) { 
      alert(errMsg); 
     } 
    }); 

Und der C# -Code (In JPortal \ Controllers \ PortalController.cs):

 public ActionResult RenderProthyPDF(string Year, string Sequence, string prothyDocumentURL, PortalCaseView viewmodel) 
    { 
     System.Web.HttpContext.Current.Session.Add("renderingPDF", "true"); 
     System.Web.HttpContext.Current.Session.Add("renderingURL", prothyDocumentURL); 

     return View(); 
    } 

Was soll ich aus, diese Fehler zu verhindern tun erzeugt wird? Was läuft falsch?

Edit: Bin Angabe Verzeichnisse ich habe:

Die genannten Hyperlinks in den Teilansichten sind in JPortal \ Views \ Shared_.cshtml

Die Hauptansicht (der Javascript-Code) ist in: JPortal \ Views \ Portal \ Case.cshtml

die Action Funktion ist in JPortal \ Conrollers \ PortalController.cs

Antwort

1

ist das nicht der Fehler messag e klar genug, wie es sagt, dass es nicht eine Ansicht Datei mit dem Namen RenderProthyPDF.cshtml im folgenden Pfad es nach

~/Views/Portal/* 
~/Views/Shared/* 

In Ihrer Controller Aktion Methode RenderProthyPDF Sie return View(); sagen finden konnte, was für eine Ansicht aussehen wird mit derselbe Name wie der der Aktionsmethode, die nicht gefunden werden kann und somit der Fehler.

, wenn Sie nicht die Sicht dann eine generieren (oder), wenn Sie die Ansicht mit einem anderen Namen erstellt haben, dann diesen Namen übergeben an die View() Verfahren wie (da einer der Überlastung für View() Methode akzeptiert den Namen der Ansicht als string Argument)

return View("MydifferentNamedRenderProthyPDF"); 
+0

Nicht intuitiv für mich offensichtlich. Die RenderProtyPDF-Funktion wird aus mehreren Ansichten aufgerufen. Wie würde ich also wissen, in welcher Ansicht sie zurückgegeben wird? – crmauch

+0

Sollte ich etwas anderes als ein View() Ergebnis zurückgeben? – crmauch

+0

Überprüfen Sie Ihren Views-Ordner und sehen Sie, ob Sie eine View-Datei namens 'RenderProtyPDF' haben? – Rahul