Chế độ xem hoặc chế độ xem không tìm thấy hoặc không có công cụ chế độ xem nào hỗ trợ các vị trí đã tìm


80

Lỗi như: Không tìm thấy chế độ xem 'LoginRegister' hoặc chế độ xem chính của nó hoặc không có công cụ chế độ xem nào hỗ trợ các vị trí đã tìm kiếm. Các vị trí sau đã được tìm kiếm:

~ / Lượt xem / MyAccount / LoginRegister.aspx

~ / Lượt xem / MyAccount / LoginRegister.ascx

~ / Lượt xem / Đã chia sẻ / Đăng nhậpRegister.aspx

~ / Lượt xem / Đã chia sẻ / Đăng nhậpRegister.ascx

~ / Lượt xem / MyAccount / LoginRegister.cshtml

~ / Lượt xem / MyAccount / LoginRegister.vbhtml

~ / Lượt xem / Đã chia sẻ / Đăng nhậpRegister.cshtml

~ / Lượt xem / Đã chia sẻ / Đăng nhậpRegister.vbhtml

Trên thực tế trang xem trang của tôi là ~/Views/home/LoginRegister.cshtmlvì vậy những gì tôi làm

và của tôi 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 }
            );
        }
    }

Di chuyển chế độ xem LoginResiter vào đúng thư mục (dành cho bộ điều khiển MyAccount).
Mansfield

Bộ điều khiển? Nhưng trang của tôi là xem
user2564537

2
ASP.NET MVC mong đợi các lượt xem cho một bộ điều khiển cụ thể nằm trong thư mục chia sẻ hoặc một thư mục có tên của bộ điều khiển. Như bạn có thể thấy, nó đang nằm trong thư mục "MyAccount" và thư mục "Shared". Nếu bạn muốn sử dụng dạng xem trong bộ điều khiển, bạn nên đặt nó vào thư mục có tên bộ điều khiển đó. Nó không liên quan gì đến cấu hình tuyến đường của bạn.
Mansfield

8
Tôi nhận được lỗi này sau khi xuất bản một trang web sang một máy tính khác. Hóa ra hành động Xây dựng trên chế độ xem đã được đặt thành Nonethay Contentvì chuyển đổi chúng và xuất bản lại (hoặc chỉ sao chép tệp) đã hoạt động.
Patrick

Câu trả lời:


107

Hãy cẩn thận nếu loại mô hình của bạn là String vì tham số thứ hai của View (chuỗi, chuỗi) là masterName, không phải model . Bạn có thể cần gọi quá tải với đối tượng (mô hình) là tham số thứ hai:

Không chính xác :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",msg);
}

Chính xác :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",(object)msg);
}

HOẶC (do bradlis7 cung cấp):

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}

16
Thay vì đúc (object)msg, xác định đối số một cách rõ ràng:return View("Message", model: msg);
bradlis7

1
Đây là một câu trả lời tuyệt vời
JsonStatham

31

Vấn đề:

Bạn Viewkhông thể tìm thấy tại các địa điểm mặc định.

Giải trình:

Các chế độ xem phải nằm trong cùng một thư mục có tên là Controllerhoặc trong Sharedthư mục.

Giải pháp:

Di chuyển của bạn Viewvào MyAccountthư mục hoặc tạo một HomeController.

Các lựa chọn thay thế:

Nếu bạn không muốn di chuyển Viewhoặc tạo mới, Controllerbạn có thể kiểm tra tại liên kết này .


3
Ngoài ra, nếu bạn đang gặp vấn đề này, tôi đã tìm thấy, tốt nhất là chỉ cần xóa chế độ xem của bạn. (sao chép nội dung của nó vào notepadd ++) Đi tới trình điều khiển của bạn và sau đó nhấp chuột phải vào kết quả hành động của bạn và chọn tạo chế độ xem, sau đó bạn có thể xem nơi bộ điều khiển của bạn đang tìm kiếm chế độ xem của bạn và đặt chế độ xem của bạn cho phù hợp.
Bill Blankenship

14

Trong Microsoft ASP.net MVC, công cụ định tuyến, được sử dụng để phân tích cú pháp Kết hợp URL đến và đi, được thiết kế với ý tưởng Quy ước trên cấu hình. Điều này có nghĩa là nếu bạn tuân theo Quy ước (quy tắc) mà công cụ định tuyến sử dụng, bạn không cần phải thay đổi Cấu hình.

Công cụ định tuyến cho ASP.net MVC không phục vụ các trang web (.cshtml). Nó cung cấp một cách để một lớp được xử lý bởi một Lớp trong mã của bạn, lớp này có thể hiển thị văn bản / html tới luồng đầu ra hoặc phân tích cú pháp và phân phát các tệp .cshtml một cách nhất quán bằng Quy ước.

Quy ước được sử dụng để định tuyến là so khớp Bộ điều khiển với một Lớp có tên tương tự ControllerNameControllernhư controller="MyAccount"nghĩa là tìm lớp có tên MyAccountController. Tiếp theo là hành động, được ánh xạ tới một hàm trong Lớp điều khiển, thường trả về một ActionResult. tức là action="LoginRegister"sẽ tìm kiếm một hàm public ActionResult LoginRegister(){}trong lớp của bộ điều khiển. Hàm này có thể trả về một View()mà sẽ được đặt tên bởi Quy ước LoginRegister.cshtmlvà sẽ được lưu trữ trong /Views/MyAccount/thư mục.

Để tóm tắt, bạn sẽ có mã sau:

/Controllers/MyAccountController.cs:

public class MyAccountController : Controller 
{
    public ActionResult LoginRegister()
    {
        return View();
    }
}

/Views/MyAccount/LoginRegister.cshtml: Tệp xem của bạn.


8

Trong hành động Đăng nhập của bạn khi trả lại chế độ xem, hãy thực hiện bên dưới, tôi biết điều này có thể được thực hiện trong mvc 5, tôi không chắc liệu trong mvc 4 cũng có.

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

5

Kiểm tra hành động xây dựng của dạng xem của bạn (tệp .cshtml) Nó phải được đặt thành nội dung. Trong một số trường hợp, tôi đã thấy rằng hành động xây dựng được đặt thành Không (do nhầm lẫn) và chế độ xem cụ thể này không được triển khai trên máy mục tiêu mặc dù bạn thấy chế độ xem đó có trong tệp dự án studio trực quan trong thư mục hợp lệ


1
Trong trường hợp của tôi, nó đã liên quan tới "xây dựng hành động" bất động sản là tốt, nhưng tôi cần phải đặt nó là "Resource Embedded"
Ali Tahouri

3

Đây có thể là một vấn đề về quyền.

Tôi đã có cùng một vấn đề gần đây. Để thử nghiệm, tôi đã tạo một trang hello.html đơn giản. Khi tôi thử tải nó, tôi nhận được thông báo lỗi liên quan đến quyền. Khi tôi đã khắc phục sự cố quyền trong thư mục web gốc, cả trang html và vấn đề kết xuất MVC đã được giải quyết.


Trong trường hợp của tôi, đó là vấn đề về quyền, cho phép người dùng đã xác thực truy cập vào thư mục gốc của ứng dụng và xóa cờ chỉ đọc đã khắc phục sự cố
Momin

2

Kiểm tra xem Chế độ xem (Tệp .ASPX) mà bạn đã tạo có trùng tên như đã đề cập trong Bộ điều khiển hay không. Ví dụ:

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

Trong trường hợp này, tệp aspx phải có tên MyView.aspx thay vì GetView.aspx


2

Tôi gặp lỗi này vì tôi đã đổi tên Chế độ xem của mình (và hành động ĐĂNG).

Cuối cùng, tôi thấy rằng tôi đã quên đổi tên các hành động CẢ HAI GET và POST thành tên mới.

Giải pháp : Đổi tên cả hành động GET và POST để khớp với tên View.


1

Nếu sự cố xảy ra không liên tục trong quá trình sản xuất, có thể là do một phương pháp hành động bị gián đoạn. Ví dụ: trong một thao tác POST liên quan đến tải lên tệp lớn, người dùng đóng cửa sổ trình duyệt trước khi quá trình tải lên hoàn tất. Trong trường hợp này, phương thức hành động có thể ném ra một ngoại lệ tham chiếu null do một mô hình hoặc đối tượng dạng xem null. Một giải pháp sẽ là quấn phần thân phương thức trong một try / catch và trả về null. Như thế này:

[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

tôi đã có vấn đề tương tự. Tôi đã sao chép một chế độ xem "Phim" và đổi tên nó là "Khách hàng" cho phù hợp. Tôi cũng đã làm tương tự với các mô hình và bộ điều khiển.

Cách giải quyết là thế này ... Tôi đổi tên Chế độ xem khách hàng thành Chế độ xem khách hàng1 và vừa tạo chế độ xem mới và gọi nó là Khách hàng .... Sau đó tôi chỉ sao chép mã Customer1 vào Khách hàng.

Điều này đã hiệu quả.

Tôi rất muốn biết nguyên nhân thực sự của vấn đề.

CẬP NHẬT Chỉ để cười .... Tôi đã quay lại và sao chép lại tất cả các kịch bản đổi tên một lần nữa ... và không gặp bất kỳ lỗi nào.


0

Nếu bạn đã kiểm tra tất cả những điều từ các câu trả lời ở trên (đó là những lỗi thường gặp) và bạn chắc chắn rằng chế độ xem của mình ở vị trí trong các trường hợp ngoại lệ, thì bạn có thể cần khởi động lại Visual Studio.

:(


0

Trong trường hợp của tôi, tôi cần sử dụng RedirectToAction để giải quyết vấn đề.

[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

Tôi đã gặp phải vấn đề này một thời gian trước và nó khiến tôi phát điên vì hóa ra nó đơn giản. Vì vậy, trong Chế độ xem của mình, tôi đã sử dụng điều khiển lưới lấy dữ liệu cho lưới thông qua yêu cầu http. Sau khi tầng giữa hoàn thành yêu cầu của tôi và trả lại tập dữ liệu, tôi đã nhận được lỗi tương tự. Hóa ra câu lệnh trả về của tôi là 'return View (dataset);' thay vì 'return Json (tập dữ liệu);


0

Tôi đã gặp phải lỗi này do đóng báo cáo không đúng cách,

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

{

} // Dấu ngoặc nhọn này cần được đóng ở cuối.

Trong tệp dạng xem Index.cshtml, tôi đã không đóng câu lệnh ở cuối chương trình. thay vào đó, tôi đã đóng không đúng cách và gặp phải lỗi này.

Tôi chắc chắn rằng không cần kiểm tra mã Controller ActionMethod vì tôi đã trả lại đúng phương thức Controller cho View. Vì vậy, nó phải là chế độ xem không phản hồi và gặp lỗi tương tự.


0

Tôi không thể tìm thấy bất kỳ giải pháp nào cho vấn đề này, cho đến khi tôi phát hiện ra các tệp không tồn tại! Điều này khiến tôi mất nhiều thời gian để tìm ra, vì Trình khám phá giải pháp hiển thị các tệp!

nhập mô tả hình ảnh ở đây

Nhưng khi tôi nhấp vào Index.cshtml, tôi gặp lỗi này:

nhập mô tả hình ảnh ở đây

Vì vậy, đó là lý do cho lỗi này để hiển thị. Tôi hy vọng câu trả lời này sẽ giúp ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.