部分视图无法识别另一个控制器

时间:2011-06-11 15:49:10

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-ajax

我正在创建登录的部分视图,该视图将使用在创建新的MVC 3项目时添加的默认模型(AccountModel)和控制器(AccountController)。

但是,部分视图(Login)无法识别控制器(AccountController)。当我点击“注册”链接时,我收到“无法找到资源”错误。下面是代码的片段。

请指教。

由于

_Layout.cshtml

 <div>
   <div id="SideBar">
        <div id="LoginHeader">
           Login
        </div>
        <div id = "Login">
            @Html.Partial("UserControls/UserLogin", new BalanzLab.Models.LogOnModel())
        </div>
   </div>
 </div>

UserLogin.cshtml

@model BalanzLab.Models.LogOnModel
@using (Ajax.BeginForm("LogOn", "AccountController", new AjaxOptions { UpdateTargetId = "AccountController" }))
{
    if (Request.IsAuthenticated)
    {
        Html.DisplayFor(Context.User.Identity);
    }
    else
    {
        <div >User Name
          @Html.TextBox(" ")
        </div>
        <div>Password
          @Html.Password(" ")
        </div>
        <div>
          @Html.ActionLink("Signup", "Register", "AccountController") 
        </div>
        <p><input type="submit" value="Let me in!" /></p>
     }

}

1 个答案:

答案 0 :(得分:1)

这与您拥有UserLogin共享视图的位置以及您如何引用它有关。

首先是如何:

您在_layout视图中包含了局部视图。因此,它在每个使用该布局的页面中。

现在考虑一下你在这里做什么。当你单击那个应该带你进入帐户控制器注册方法的注册链接时,它就会调用@Html.Partial:

@Html.Partial("UserControls/UserLogin", new BalanzLab.Models.LogOnModel())

并尝试将其包含在当前页面中。由于UserLogin控件实际位于主视图目录中的文件夹下,因此它不在视图引擎将搜索的标准搜索路径中。它将在Accounts目录中检查视图(当前控制器),并检查Shared views目录。由于无法在任一位置找到局部视图,因此会出现错误。 (看起来像这样)

The partial view 'UserControls/UserLogin' was not found or no view engine 
supports the searched locations. The following locations were searched:
~/Views/Account/UserControls/UserLogin.aspx
~/Views/Account/UserControls/UserLogin.ascx
~/Views/Shared/UserControls/UserLogin.aspx
~/Views/Shared/UserControls/UserLogin.ascx
~/Views/Account/UserControls/UserLogin.cshtml
~/Views/Account/UserControls/UserLogin.vbhtml
~/Views/Shared/UserControls/UserLogin.cshtml
~/Views/Shared/UserControls/UserLogin.vbhtml

最干净的解决方案是将此部分视图移动到共享视图目录。因为它是_layout视图的一部分,所以你几乎必须这样做才能使这个工作,因为每个使用布局的视图都会包含partial。