10 Stimmen

asp.net mvc3 - Controller-Methode gibt View(viewName, string) zurück, aber es kommt zu Ungereimtheiten

Hat jemand dieses Problem gesehen? Ich bin ein ASP.NET MVC-Neuling. Ich habe eine ASP.NET MVC 3 Website, die .aspx und .ascx Ansichten verwendet. In der gesamten Website verwende ich return View() oder return View(viewName) in meinen Controller-Methoden, die auf die entsprechende aspx/ascx-Ansicht verweist. In meinem AccountController (modifiziert, um DotNetOpenAuth zu verwenden) verfolge ich jedoch denselben Ansatz, aber das MVC-Framework sucht nicht nach aspx- oder ascx-Views. Stattdessen sucht es im Pfad nach .cshtml- oder .vbhtml-Ansichten (ich nehme an, die Razor-Engine). Warum sucht es nicht einfach nach aspx- und ascx-Ansichten wie der Rest meiner Website? Controller-Methode folgt:

public ActionResult Authenticate()
{
    var response = openid.GetResponse();
    var statusMessage = "";
    if (response == null)
    {
        Identifier id;
        //make sure your users openid_identifier is valid.
        if (Identifier.TryParse(Request.Form["openid_identifier"], out id))
        {
            try
            {
                //request openid_identifier
                return openid.CreateRequest(Request.Form["openid_identifier"])
                   .RedirectingResponse.AsActionResult();
            }
            catch (ProtocolException ex)
            {
                statusMessage = ex.Message;
                return View("LogOn", statusMessage);
            }
        }
        else
        {
            statusMessage = "Invalid identifier";
            return View("LogOn", statusMessage);
        }
    }
    else
    {
        //check the response status
        switch (response.Status)
        {
            //success status
            case AuthenticationStatus.Authenticated:
                Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
                FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);

                //TODO: response.ClaimedIdentifier, to login or create new account 

                return RedirectToAction("Index", "Home");

            case AuthenticationStatus.Canceled:
                statusMessage = "Canceled at provider";
                return View("LogOn", statusMessage);

            case AuthenticationStatus.Failed:
                statusMessage = response.Exception.Message;
                return View("LogOn", statusMessage);
        }
    }
    return View("LogOn");
}

Fehlerdetails folgen:

Die Ansicht 'LogOn' oder ihr Master wurde nicht gefunden oder keine View Engine unterstützt die gesuchten Orte. Die folgenden Orte wurden durchsucht: ~/Views/Account/Cancled bei provider.master ~/Views/Shared/Cancled bei provider.master ~/Views/Konto/LogOn.cshtml ~/Views/Konto/Anmelden.vbhtml ~/Views/Freigegeben/LogOn.cshtml ~/Views/Gemeinsam/LogOn.vbhtml ~/Views/Konto/Abgebrochen bei provider.cshtml ~/Views/Konto/Gekündigt bei provider.vbhtml ~/Views/Shared/Cancled at provider.cshtml ~/Views/Freigegeben/Abgebrochen bei provider.vbhtml

Beschreibung: Eine unbehandelte Ausnahme trat während der Ausführung der aktuellen Web-Anfrage. Bitte überprüfen Sie den Stack-Trace für weitere Informationen über den Fehler und seinen Ursprung im dem Code.

E System.InvalidOperationException: Die Ansicht 'LogOn' oder ihr Master wurde nicht gefunden oder keine View Engine unterstützt die gesuchten Orte. Die folgenden Orte wurden durchsucht: [ ] Anbieter.Master ~/Views/Freigegeben/Abgebrochen bei provider.master ~/Views/Konto/LogOn.cshtml ~/Views/Konto/Anmelden.vbhtml ~/Views/Freigegeben/LogOn.cshtml ~/Views/Gemeinsam/LogOn.vbhtml ~/Views/Konto/Abgebrochen bei provider.cshtml ~/Views/Konto/Gekündigt bei provider.vbhtml ~/Views/Shared/Cancled at provider.cshtml ~/Views/Freigegeben/Abgebrochen bei provider.vbhtml

Fehlerquelle:

Eine unbehandelte Ausnahme wurde während der Ausführung der aktuellen Web-Anfrage erzeugt. Informationen über den Ursprung und Ort der Ausnahme können mit Hilfe der Ausnahme identifiziert werden Stack Trace unten.

Stack Trace:

[InvalidOperationException: Die Ansicht 'LogOn' oder dessen Master wurde nicht gefunden oder keine View-Engine unterstützt die gesuchten Standorte. Die folgenden Orte [ ] ~/Views/Account/Cancled bei provider.master ~/Views/Shared/Cancled bei provider.master ~/Views/Account/LogOn.cshtml ~/Views/Konto/Anmelden.vbhtml ~/Views/Freigegeben/LogOn.cshtml ~/Views/Gemeinsam/LogOn.vbhtml ~/Views/Account/Cancled bei provider.cshtml ~/Views/Konto/Gekündigt bei provider.vbhtml ~/Views/Shared/Cancled at provider.cshtml ~/Views/Freigegeben/Abgebrochen bei provider.vbhtml]
System.Web.Mvc.ViewResult.FindView(ControllerContext Kontext) +315050
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext Kontext) +129
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c_ AnzeigeKlasse1c.b _19() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 continuation) +260 System.Web.Mvc.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 ActionResult actionResult) +177
System.Web.Mvc.ControllerA controllerContext, String actionName) +343 System.Web.Mvc.Controller.ExecuteCore() +116 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c_ AnzeigeKlasseb.b _5() +37 System.Web.Mvc.Async.<>c_ AnzeigeKlasse1.b _0() +21 System.Web.Mvc.Async.<>c_ _AnzeigeKlasse8 1.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult 1.Ende() +62 System.Web.Mvc.<>c _DisplayClasse.b\ d() +50 System.Web.Mvc.SecurityUtil.b _0(Aktion f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Aktion action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8841105 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

Danke Shan

25voto

Jason Goemaat Punkte 27951

Der Schlüssel liegt in der ersten Zeile Ihrer Ausnahme:

The view 'LogOn' or its master was not found or no view engine supports 
the searched locations. The following locations were searched: 
~/Views/Account/Canceled at provider.master 

Wenn Sie zwei Strings an View() übergeben, ist der erste der Name der Ansicht und der zweite der Name der zu verwendenden Masteransicht oder Vorlage. Wenn Sie statusMessage als Modell für Ihren View übergeben wollen, können Sie es in object umwandeln, was den Aufruf der überschriebenen View()-Methode wo Sie ein Modell übergeben:

return View("LogOn", (object)statusMessage);

Offensichtlich erhalten Sie die Meldung "Cancelled at provider" (Abgebrochen beim Anbieter) und geben dies als Namen der zu verwendenden Hauptseite an. Wenn die Ansicht "Logon.aspx" eine Musterseite verwendet und Sie z. B. eine Musterseite "Canceled at provider.master" in Ihrem Ordner "Shared view" haben, würde dies die Ansicht "LogOn.aspx" laden und sie zwingen, die Musterseite "Canceled at provider.master" zu verwenden, auch wenn sie standardmäßig für die Verwendung einer anderen Musterseite eingerichtet wurde:

string statusMessage = "Canceled at provider";
return View("LogOn", statusMessage);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X