Представление или его мастер не были найдены или механизм просмотра не поддерживает найденные местоположения
Ошибка: просмотр "LoginRegister" или его мастер не найден или механизм просмотра не поддерживает найденные местоположения. Были обысканы следующие местоположения:
~/Views/MyAccount/LoginRegister.aspx
~/Views/MyAccount/LoginRegister.ascx
~/Views/Shared/LoginRegister.aspx
~/Views/Shared/LoginRegister.ascx
~/Views/MyAccount/LoginRegister.cshtml
~/Views/MyAccount/LoginRegister.vbhtml
~/Views/Shared/LoginRegister.cshtml
~/Views/Shared/LoginRegister.vbhtml
На самом деле моя страница просмотра страниц ~/Views/home/LoginRegister.cshtml
, так что я делаю
а мой RouteConfig
-
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "MyAccount", action = "LoginRegister", id = UrlParameter.Optional }
);
}
}
Ответы
Ответ 1
Будьте осторожны , если ваш тип модели - String, потому что второй параметр View (string, string) - masterName, не модель. Возможно, вам придется вызвать перегрузку с объектом (моделью) в качестве второго параметра:
Неправильно:
protected ActionResult ShowMessageResult(string msg)
{
return View("Message",msg);
}
Правильно:
protected ActionResult ShowMessageResult(string msg)
{
return View("Message",(object)msg);
}
ИЛИ (предоставляется bradlis7):
protected ActionResult ShowMessageResult(string msg)
{
return View("Message",model:msg);
}
Ответ 2
Проблема:
Ваш View
не может быть найден в местах по умолчанию.
Объяснение:
Представления должны находиться в одной папке с именем Controller
или в папке Shared
.
Решение:
Переместите ваш View
в папку MyAccount
или создайте HomeController
.
Альтернативы:
Если вы не хотите переместить View
или создать новый Controller
, вы можете проверить ссылку .
Ответ 3
В Microsoft ASP.net MVC механизм маршрутизации, используемый для синтаксического анализа входящих и исходящих URL-адресов, разработан с идеей конвенции по конфигурации. Это означает, что если вы будете следовать правилам (правилам), которые использует механизм маршрутизации, вам не нужно изменять конфигурацию.
Механизм маршрутизации для ASP.net MVC не обслуживает веб-страницы (.cshtml). Он предоставляет способ для URL-адреса обрабатывать класс в вашем коде, который может отображать текст /html в выходной поток, или анализировать и обслуживать файлы .cshtml согласованным образом с помощью Конвенции.
Конвенция, которая используется для маршрутизации, должна соответствовать контроллеру для класса с именем, аналогичным ControllerNameController
i.e. controller="MyAccount"
означает поиск класса с именем MyAccountController
. Далее идет действие, которое отображается на функцию в классе контроллера, которая обычно возвращает ActionResult
. т.е. action="LoginRegister"
будет искать функцию public ActionResult LoginRegister(){}
в классе контроллера. Эта функция может возвращать View()
, которая была бы в соответствии с Конвенцией с именем LoginRegister.cshtml
и была бы сохранена в папке /Views/MyAccount/
.
Подводя итог, вы получите следующий код:
/Controllers/MyAccountController.cs:
public class MyAccountController : Controller
{
public ActionResult LoginRegister()
{
return View();
}
}
/Views/MyAccount/LoginRegister.cshtml: ваш файл просмотра.
Ответ 4
В действии LoginRegister при возврате представления, сделайте ниже, я знаю, что это можно сделать в mvc 5, im не уверен, что и в mvc 4.
public ActionResult Index()
{
return View("~/Views/home/LoginRegister.cshtml");
}
Ответ 5
Это может быть проблема с правами доступа.
У меня была такая же проблема в последнее время. В качестве теста я создал простую страницу hello.html. Когда я попытался загрузить его, у меня появилось сообщение об ошибках. Как только я исправил проблему с разрешениями в корневой папке, были устранены проблемы с html-страницей и MVC-рендерингом.
Ответ 6
Проверьте, имеет ли файл вида (.ASPX), который вы создали, с тем же именем, что и в контроллере. Например, например:
public ActionResult GetView()
{
return View("MyView");
}
В этом случае файл aspx должен иметь имя MyView.aspx вместо GetView.aspx
Ответ 7
Я получил эту ошибку, потому что переименовал свой вид (и действие POST).
Наконец, я обнаружил, что забыл переименовать BOTH GET и POST в новое имя.
Решение: Переименуйте как действия GET, так и POST, чтобы соответствовать имени вида.
Ответ 8
Проверьте действие сборки вашего представления (файл .cshtml). Он должен быть установлен в качестве содержимого. В некоторых случаях я видел, что действие сборки было установлено на "Нет" (по ошибке), и это конкретное представление не было развернуто на целевой машине, даже если вы видите, что представление присутствует в файле проекта визуальной студии в действительной папке
Ответ 9
Если проблема возникает периодически при производстве, это может быть связано с прерыванием действия. Например, во время операции POST, связанной с большой загрузкой файла, пользователь закрывает окно браузера перед завершением загрузки. В этом случае метод действия может вызывать исключение нулевой ссылки, полученное из нулевой модели или объекта просмотра. Решение заключалось бы в том, чтобы обернуть тело метода в try/catch и вернуть null. Вот так:
[HttpPost]
public ActionResult Post(...)
{
try
{
...
}
catch (NullReferenceException ex) // could happen if POST is interrupted
{
// perhaps log a warning here
return null;
}
return View(model);
}
Ответ 10
Если вы проверили все вещи из приведенных выше ответов (которые являются общими ошибками), и вы уверены, что ваше представление находится в месте в исключениях, вам может потребоваться перезапустить Visual Studio.
: (
Ответ 11
У меня была такая же проблема. Я скопировал представление "Кино" и соответственно переименовал его в "Клиент". Я также сделал то же самое с моделями и контроллерами.
Решение было таким... Я переименовал представление клиента в Customer1, просто создал новое представление и назвал его Customer.... Затем я просто скопировал код Customer1 в Customer.
Это сработало.
Я хотел бы знать настоящую причину проблемы.
ОБНОВЛЕНИЕ Только для ухмылок.... Я вернулся и повторил весь сценарий переименования снова... и не получил никаких ошибок.
Ответ 12
В моем случае мне нужно было использовать RedirectToAction для решения проблемы.
[HttpGet]
[ControleDeAcessoAuthorize("Report/ExportToPDF")]
public ActionResult ExportToPDF(int id, string month, string output)
{
try
{
// Validate
if (output != "PDF")
{
throw new Exception("Invalid output.");
}
else
{
...// code to generate report in PDF format
}
}
catch (Exception ex)
{
return RedirectToAction("Error");
}
}
[ControleDeAcessoAuthorize("Report/Error")]
public ActionResult Error()
{
return View();
}
Ответ 13
Я столкнулся с этим некоторое время назад, и это сводило меня с ума, потому что это оказалось простым. Поэтому в моем View я использовал элемент управления grid, который получал данные для сетки через http-запрос. Когда средний уровень завершил мой запрос и вернул набор данных, я получил ту же ошибку. Оказывается, мой оператор return был 'return View (набор данных);' вместо 'вернуть Json (набор данных);
Ответ 14
В моей работе есть несколько политик, которые не делают работу NuGet вообще, и в результате мое решение потеряло свои ссылки на DLL microsoft.aspnet.mvc. Однако, как только я добавил DLL в ссылки вручную, мне удалось отобразить страницу.