Asp.net mvc3 - Метод контроллера возвращает View (viewName, string), но возникает странность

Кто-нибудь видел эту проблему? Я новичок ASP.NET MVC. У меня есть сайт ASP.NET MVC 3, который использует представления .aspx и .ascx. На всем сайте я использую return View() или возвращает View (viewName) в своих методах контроллера, который направляет соответствующее представление aspx/ascx. Однако в моем складе AccountController (изменен для использования DotNetOpenAuth) я придерживаюсь того же подхода, но структура MVC не ищет представления aspx или ascx. Вместо этого он ищет путь для представлений .cshtml или .vbhtml(механизм Razor, который я предполагаю). Почему они не ищут взгляды aspx и ascx, как и остальные мои сайты? Ниже приведен метод контроллера:

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");
}

Ниже представлена ​​ошибка:

Вид "LogOn" или его мастер не был найденный или отсутствующий механизм просмотра поддерживает поиск местоположений. Следующие места были обысканы: ~/Просмотры/Учетная запись/Отменено на provider.master ~/Views/Shared/Canceled at provider.master ~/Views/счета/LogOn.cshtml ~/Views/счета/LogOn.vbhtml ~/Views/Shared/LogOn.cshtml ~/Views/Shared/LogOn.vbhtml ~/Просмотры/Учетная запись/Отменено на provider.cshtml ~/Просмотры/Учетная запись/Отменено на provider.vbhtml ~/Views/Shared/Canceled at provider.cshtml ~/Views/Shared/Canceled at provider.vbhtml

Описание: Необработанное исключение произошли во время выполнения текущий веб-запрос. Пожалуйста, просмотрите трассировки стека для получения дополнительной информации о ошибка и где она возникла в код.

Сведения об исключении: System.InvalidOperationException: view 'LogOn' или его мастер не был найденный или отсутствующий механизм просмотра поддерживает поиск местоположений. Следующие места были обысканы: ~/Просмотры/Учетная запись/Отменено на provider.master ~/Views/Shared/Canceled at provider.master ~/Views/счета/LogOn.cshtml ~/Views/счета/LogOn.vbhtml ~/Views/Shared/LogOn.cshtml ~/Views/Shared/LogOn.vbhtml ~/Просмотры/Учетная запись/Отменено на provider.cshtml ~/Просмотры/Учетная запись/Отменено на provider.vbhtml ~/Views/Shared/Canceled at provider.cshtml ~/Views/Shared/Canceled at provider.vbhtml

Ошибка источника:

Создано необработанное исключение во время выполнения текущего веб-запрос. Информация о происхождение и местоположение исключения могут быть идентифицированы с использованием исключения трассировка стека ниже.

Трассировка стека:

[InvalidOperationException: вид "LogOn" или его мастер не были найдены или механизм просмотра не поддерживает поиск местах. Следующие места были обысканы: ~/Просмотры/Учетная запись/Отменено на provider.master ~/Views/Shared/Canceled at provider.master ~/Views/счета/LogOn.cshtml ~/Views/счета/LogOn.vbhtml ~/Views/Shared/LogOn.cshtml ~/Views/Shared/LogOn.vbhtml ~/Просмотры/Учетная запись/Отменено на provider.cshtml ~/Просмотры/Учетная запись/Отменено на provider.vbhtml ~/Views/Shared/Canceled at provider.cshtml ~/Views/Shared/Canceled at provider.vbhtml]
System.Web.Mvc.ViewResult.FindView(ControllerContext контекст) +315050
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext контекст) +129
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc <. > C_DisplayClass1c.b_19() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter фильтр, 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.ControllerActionInvoker.InvokeAction(ControllerContext 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_DisplayClassb.b_5() +37 System.Web.Mvc.Async. < > c_DisplayClass1.b_0() +21 System.Web.Mvc.Async. < > c_DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +62 System.Web.Mvc. < > c_DisplayClasse.b_d() +50 System.Web.Mvc.SecurityUtil.b_0 (Действие f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action действие) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult результат) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8841105 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & completedSynchronously) +184

Спасибо Shan

Ответ 1

Ключ находится в первой строке вашего исключения:

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 

Если вы передадите две строки в View(), первое из них - это имя вида, а второе - имя основного вида или шаблона для использования. Если вы хотите передать statusMessage в качестве модели для своего вида, вы можете передать его объекту, который заставит вызвать переопределенный метод View(), в котором вы пройдете модель:

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

По-видимому, вы получаете сообщение "Отменено на провайдере" и передаете его как имя главной страницы. Если в представлении "Logon.aspx" использовалась главная страница, и у вас была, например, главная страница "Отменена в provider.master" в вашей общей папке вида, это загрузило бы представление "LogOn.aspx" и заставило бы ее использовать " Отменена на главной странице поставщика .master, даже если она по умолчанию использовала другую главную страницу:

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