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


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.