我正在创建登录的部分视图,该视图将使用在创建新的MVC 3项目时添加的默认模型(AccountModel)和控制器(AccountController)。
但是,部分视图(Login)无法识别控制器(AccountController)。当我点击“注册”链接时,我收到“无法找到资源”错误。下面是代码的片段。
请指教。
由于
<div>
<div id="SideBar">
<div id="LoginHeader">
Login
</div>
<div id = "Login">
@Html.Partial("UserControls/UserLogin", new BalanzLab.Models.LogOnModel())
</div>
</div>
</div>
@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>
}
}
答案 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。