Tidak dapat menemukan Tampilan Area di ASP.Net MVC 5

Proyek baru tidak dapat menemukan tampilan untuk Area baru.

Ia mencoba menemukannya di folder induk Views.

Solusi yang disarankan adalah memasukkan .DataTokens.Add("area", "AREANAME") ke dalam metode RegisterArea.

public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Test_default",
                "Test/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            ).DataTokens.Add("area", "Test");
        }

Namun, dengan ini, saya mendapatkan kesalahan "Item dengan kunci yang sama telah ditambahkan.".

PEMBARUAN 1: Saya tidak melakukan sesuatu yang mewah pada pengontrol.

public ActionResult Index()
        {
            return View();
        }

PEMBARUAN 2: Saya hanya ingin menambahkan bahwa saya juga mendaftarkan komponen ke dalam wadah Unity. Namun menurut saya hal ini tidak menimbulkan masalah, karena secara eksplisit dinyatakan bahwa pengontrol saya tidak perlu didaftarkan.


person Jonas Arcangel    schedule 17.05.2014    source sumber
comment
Tunjukkan kepada kami tindakan pengontrol Anda.   -  person Erik Funkenbusch    schedule 18.05.2014
comment
Saya telah memperbarui di atas untuk menunjukkan bahwa tidak ada yang istimewa di pengontrol saya.   -  person Jonas Arcangel    schedule 21.05.2014


Jawaban (3)


Kemungkinan besar karena Tampilan sedang dicari dari namespace

YourNamespace.YourApplication.Controllers 

dan sebaliknya itu harus dilihat dari namespace (atau namespace apa pun yang telah Anda tetapkan)

YourNamespace.YourApplication.Areas.Test.Controllers

Tambahkan yang berikut ke deklarasi rute Anda

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Test_default",
        "Test/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        namespaces: new[] { "YourNamespace.YourApplication.Areas.Test.Controllers" }
    );
}
person Janne Matikainen    schedule 22.05.2014

Metode Register Area sudah mengetahui Anda berada di Area Anda yang bernama Test. Menggunakan fungsi DataTokens.Add("area", "Test") mendeklarasikan rute Anda untuk kedua kalinya. Itu sebabnya Anda mendapatkan kesalahan ini.

Masalah awal pada tampilan Anda tentu tidak terkait dengan pengaturan perutean Anda. Apakah ada kode khusus saat merender tampilan dari pengontrol?

person Jämes    schedule 17.05.2014

Saya telah menemukan bahwa jika deklarasi rute Anda tidak berada di atas deklarasi rute "tangkap semua" (biasanya pandangan orang tua Anda seperti yang Anda tunjukkan), maka deklarasi tersebut akan selalu default ke induknya. Coba pindahkan deklarasi rute ke atas apa pun yang ingin ditangkap oleh orang tua

person user3036342    schedule 22.05.2014
comment
Deklarasi rute untuk area tersebut dipanggil dari AreaRegistration, yang dipanggil sebelum RouteConfig di global.asax.cs saya. - person Jonas Arcangel; 22.05.2014