Представлення або його основний файл не знайдено або жоден механізм перегляду не підтримує пошукові місця


80

Помилка: подання '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 }
            );
        }
    }

Перемістіть подання LoginResiter у потрібну папку (для контролера MyAccount).
— Менсфілд,

Контролер? Але моя сторінка перегляду
— user2564537

2
ASP.NET MVC очікує, що подання для певного контролера будуть або у спільній папці, або в папці з ім'ям контролера. Як бачите, він шукає в папці "MyAccount" та "Shared". Якщо ви хочете використовувати подання в контролері, вам слід помістити його в папку з цим ім'ям контролера. Це не має нічого спільного з конфігурацією маршруту.
— Менсфілд,

8
Я отримав цю помилку після публікації сайту на іншому комп’ютері. Виявилося, що для дії "Збірка" для подання було встановлено Noneзамість того, Contentщоб перемикання та повторна публікація (або просто копіювання файлу) спрацювало.
— Патрік

Відповіді:


108

Будьте обережні, якщо тип вашої моделі - String, оскільки другим параметром View (рядок, рядок) є 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);
}

16
Замість кастингу (object)msgчітко вкажіть аргумент:return View("Message", model: msg);
— bradlis7

1
Це чудова відповідь
— JsonStatham

31

Проблема:

Вас Viewнеможливо знайти в місцях за замовчуванням

Пояснення:

Представлення повинні знаходитись в тій самій папці, що має назву Controllerабо в Sharedпапці.

Рішення:

Або перемістіть файл Viewу MyAccountпапку, або створіть файл HomeController.

Альтернативи:

Якщо ви не хочете переносити Viewабо створювати новий, Controllerперевірте це посилання .


3
Крім того, якщо у вас виникла ця проблема, яку я знайшов, найкраще просто видалити свій погляд. (скопіюйте його вміст до notepadd ++) Перейдіть до свого контролера, а потім клацніть правою кнопкою миші на вашому результаті дії та виберіть «Сформувати подання», тоді ви зможете побачити, де ваш контролер шукав ваш вигляд, і розмістити свої погляди відповідно.
— Білл Бланкеншип

14

У Microsoft ASP.net MVC механізм маршрутизації, який використовується для синтаксичного аналізу вхідних та вихідних комбінацій URL-адрес, розроблений з ідеєю Конвенції над конфігурацією. Це означає, що якщо ви дотримуєтесь Конвенції (правил), яку використовує механізм маршрутизації, вам не доведеться змінювати конфігурацію.

Механізм маршрутизації для ASP.net MVC не обслуговує веб-сторінки (.cshtml). Він надає спосіб для обробки URL-адреси класом у вашому коді, який може передавати текст / html у вихідний потік або аналізувати та послідовно обслуговувати файли .cshtml, використовуючи Конвенцію.

Конвенція, яка використовується для маршрутизації, полягає у встановленні відповідності контролера до класу з іменем, подібним до ControllerNameControllerтобто 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: Ваш файл перегляду.


8

У вашій дії LoginRegister при поверненні подання виконайте наведені нижче дії, я знаю, що це можна зробити у mvc 5, я не впевнений, що це також у mvc 4.

 public ActionResult Index()
 {
     return View("~/Views/home/LoginRegister.cshtml");
 }

5

Перевірте дію збірки вашого подання (файл .cshtml) Для нього має бути встановлено вміст. У деяких випадках я бачив, що для дії збірки було встановлено значення None (помилково), і це конкретне представлення не було розгорнуто на цільовій машині, хоча ви бачите, що це представлення присутнє у файлі проекту Visual Studio під діючою папкою


1
У моєму випадку це також було пов'язано з властивістю "Build Action", але мені потрібно було встановити для нього "Вбудований ресурс"
— Алі Тахоурі,

3

Це може бути проблемою дозволів.

Нещодавно у мене була та сама проблема. В якості тесту я створив просту сторінку hello.html. Коли я спробував його завантажити, я отримав повідомлення про помилку щодо дозволів. Після того, як я виправив проблему дозволів у кореневій веб-папці, були вирішені як проблема з HTML-сторінкою, так і з відтворенням MVC.


У моєму випадку це також була проблема з дозволами, дозволено аутентифікованим користувачам доступ до кореневої папки програми та видалення прапора лише для читання виправили проблему
— Момін

2

Перевірте, чи створений вами подання (файл .ASPX) має те саме ім'я, що згадується в контролері. Наприклад, наприклад:

 public ActionResult GetView()
 {
    return View("MyView");
 }

У цьому випадку файл aspx повинен мати ім'я MyView.aspx замість GetView.aspx


2

Я отримав цю помилку, оскільки перейменував свій подання (і дію POST).

Врешті-решт я виявив, що забув перейменувати BOTH GET і POST дії на нову назву.

Рішення : Перейменуйте дії GET і POST, щоб вони відповідали імені подання.


1

Якщо проблема виникає з перервами у виробництві, це може бути пов’язано з перериванням методу дії. Наприклад, під час операції 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);
}

1

У мене була така сама проблема. Я скопіював подання "Фільм" і відповідно перейменував його на "Клієнт". Я також зробив те саме з моделями та контролерами.

Дозвіл був такий ... Я перейменовую Перегляд Клієнта на Клієнт1 і щойно створив нове подання і назвав його Клієнтом .... Потім я просто скопіював код Клієнта1 до Клієнта.

Це спрацювало.

Я хотів би знати справжню причину проблеми.

ОНОВИТИ Лише для посмішки .... Я повернувся і повторив усі сценарії перейменування ще раз ... і не отримав жодних помилок.


0

Якщо ви перевірили всі речі з наведених вище відповідей (що є типовими помилками) і впевнені, що ваш вигляд знаходиться у тому місці, де є винятки, можливо, вам доведеться перезапустити Visual Studio.

:(


0

У моєму випадку мені потрібно було використовувати 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();
}

0

Я натрапив на це деякий час тому, і це звели мене з розуму, бо це виявилося просто. Отже, в моєму поданні я використовував елемент керування сіткою, який отримував дані для сітки через http-запит. Як тільки середній рівень завершив мій запит і повернув набір даних, я отримав ту ж помилку. Виявляється, моєю заявою повернення було 'return View (набір даних);' замість 'return Json (набір даних);


0

Я зіткнувся з цією помилкою через неправильне закриття заяви,

@using (Html.BeginForm ("DeleteSelected", "Employee", FormMethod.Post))

{

} // Цю фігурну дужку потрібно було закрити в кінці.

У файлі перегляду Index.cshtml. Я не закрив оператор наприкінці програми. натомість я закінчився неправильним закриттям і наткнувся на цю помилку.

Я був впевнений, що немає необхідності перевіряти код ActionMethod Controller, оскільки я правильно повернув метод Controller у подання. Отже, це має бути погляд, який не відповідає і зіткнувся з подібною помилкою.


0

Я не міг знайти рішення цієї проблеми, поки не з’ясував, що файли не існують! Це мені зайняло багато часу, щоб зрозуміти, оскільки Solution Explorer показує файли!

введіть тут опис зображення

Але коли я натискаю на Index.cshtml, я отримую цю помилку:

введіть тут опис зображення

Отже, це стало причиною появи цієї помилки. Сподіваюсь, ця відповідь комусь допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.