有没有人见过这个问题?我是一个ASP.NET MVC新手。我有一个使用.aspx和.ascx视图的ASP.NET MVC 3站点。在整个站点中,我使用返回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'或其主人没有 发现或没有视图引擎支持 搜索位置。下列 搜索地点: 〜/ Views / Account /取消 provider.master 〜/ Views / Shared / Cancelled at provider.master 〜/查看/帐号/ LogOn.cshtml 〜/查看/帐号/ LogOn.vbhtml 〜/查看/共享/ LogOn.cshtml 〜/查看/共享/ LogOn.vbhtml 〜/ Views / Account /取消 provider.cshtml 〜/ Views / Account /取消 provider.vbhtml 〜/ Views / Shared / Cancelled at provider.cshtml 〜/ Views / Shared / Cancelled at provider.vbhtml
描述:未处理的异常 在执行期间发生 当前的网络请求。请查看 堆栈跟踪以获取更多信息 错误及其来源 代码。
异常详细信息: System.InvalidOperationException:The 查看'LogOn'或其主人没有 发现或没有视图引擎支持 搜索位置。下列 搜索地点: 〜/ Views / Account /取消 provider.master 〜/ Views / Shared / Cancelled at provider.master 〜/查看/帐号/ LogOn.cshtml 〜/查看/帐号/ LogOn.vbhtml 〜/查看/共享/ LogOn.cshtml 〜/查看/共享/ LogOn.vbhtml 〜/ Views / Account /取消 provider.cshtml 〜/ Views / Account /取消 provider.vbhtml 〜/ Views / Shared / Cancelled at provider.cshtml 〜/ Views / Shared / Cancelled at provider.vbhtml
来源错误:
生成了未处理的异常 在执行当前 网络请求。有关的信息 异常的起源和位置 可以使用例外来识别 堆栈跟踪下面。
堆栈追踪:
[InvalidOperationException:视图 找不到“LogOn”或其主人 没有视图引擎支持搜索 位置。以下地点 被搜查: 〜/ Views / Account /取消 provider.master 〜/ Views / Shared / Cancelled at provider.master 〜/查看/帐号/ LogOn.cshtml 〜/查看/帐号/ LogOn.vbhtml 〜/查看/共享/ LogOn.cshtml 〜/查看/共享/ LogOn.vbhtml 〜/ Views / Account /取消 provider.cshtml 〜/ Views / Account /取消 provider.vbhtml 〜/ Views / Shared / Cancelled at provider.cshtml 〜/ Views / Shared / Cancelled 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&LT;&GT; C_ DisplayClass1c.b _19() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter,ResultExecutingContext preContext,Func1 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&LT;&GT; C_ DisplayClassb.b _5() +37 System.Web.Mvc.Async。&lt;&gt; c_ DisplayClass1.b _0() +21 System.Web.Mvc.Async。&lt;&gt; c_ DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +62 System.Web.Mvc。&lt;&gt; c _DisplayClasse.b_ d() +50 System.Web.Mvc.SecurityUtil.b _0(行动 f)+7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(动作 行动)+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 步,布尔&amp; completedSynchronously) 184
由于 单
答案 0 :(得分:25)
密钥位于例外的第一行:
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() method:
return View("LogOn", (object)statusMessage);
您显然正在获取“已取消的提供程序”消息并将其作为要使用的母版页名称传递。如果“Logon.aspx”视图使用了母版页,并且您在共享视图文件夹中有一个主页“在provider.master上取消”,则会加载“LogOn.aspx”视图并强制它使用“取消在provider.master“主页面,即使默认情况下设置为使用不同的母版页:
string statusMessage = "Canceled at provider";
return View("LogOn", statusMessage);