Частичное представление не распознает другой контроллер - PullRequest
1 голос
/ 11 июня 2011

Я создаю частичное представление для входа в систему, которое будет использовать модель по умолчанию (AccountModel) и контроллер (AccountController), которые были добавлены при создании нового проекта MVC 3.

Однако частичное представление(Логин) не распознает контроллер (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 Ответ

1 голос
/ 11 июня 2011

Это связано с тем, где у вас есть общий вид UserLogin и как вы на него ссылаетесь.

Сначала как:

Вы включаете частичное представление из своего представления _layout,Поэтому именно на каждой странице используется этот макет.

Теперь рассмотрим, что вы здесь делаете.Когда вы нажимаете ссылку «Регистрация», которая должна привести вас к методу регистрации контроллера учетной записи, он выполняет вызов @ Html.Partial:

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

и пытается включить его на текущей странице.Поскольку элемент управления UserLogin фактически находится в папке в каталоге Home views, он не находится в стандартном пути поиска, где будет искать механизм просмотра.Он проверит в каталоге представлений 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, вам почти нужно сделать это, чтобы эта работа работала, поскольку частичное будет включаться в каждое представление, использующее макет.

...