ไม่พบ Area View ใน ASP.Net MVC 5

โครงการใหม่ไม่พบมุมมองสำหรับพื้นที่ใหม่

กำลังพยายามค้นหาในโฟลเดอร์ Views หลัก

วิธีแก้ไขที่แนะนำคือใส่ .DataTokens.Add("area", "AREANAME") ลงในเมธอด 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");
        }

อย่างไรก็ตาม ด้วยเหตุนี้ ฉันจึงได้รับข้อผิดพลาด "รายการที่มีคีย์เดียวกันถูกเพิ่มแล้ว"

อัปเดต 1: ฉันไม่ได้ทำอะไรแฟนซีกับคอนโทรลเลอร์

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

อัปเดต 2: ฉันแค่อยากจะเพิ่มว่าฉันกำลังลงทะเบียนส่วนประกอบลงในคอนเทนเนอร์ Unity ด้วย ฉันไม่คิดว่าสิ่งนี้ทำให้เกิดปัญหา เนื่องจากมีการระบุอย่างชัดเจนว่าไม่จำเป็นต้องลงทะเบียนคอนโทรลเลอร์ของฉัน


person Jonas Arcangel    schedule 17.05.2014    source แหล่งที่มา
comment
แสดงการกระทำของผู้ควบคุมของคุณให้เราทราบ   -  person Erik Funkenbusch    schedule 18.05.2014
comment
ฉันได้อัปเดตด้านบนเพื่อแสดงว่าไม่มีอะไรพิเศษในคอนโทรลเลอร์ของฉัน   -  person Jonas Arcangel    schedule 21.05.2014


คำตอบ (3)


เป็นไปได้มากที่สุดเนื่องจากมีการค้นหามุมมองจากเนมสเปซ

YourNamespace.YourApplication.Controllers 

และควรดูจากเนมสเปซแทน (หรือเนมสเปซที่คุณกำหนดไว้)

YourNamespace.YourApplication.Areas.Test.Controllers

เพิ่มสิ่งต่อไปนี้ในการประกาศเส้นทางของคุณ

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

วิธีที่ Register Area รู้อยู่แล้วว่าคุณอยู่ในพื้นที่ของคุณชื่อ Test การใช้ฟังก์ชัน DataTokens.Add("area", "Test") จะประกาศเส้นทางของคุณเป็นครั้งที่สอง นั่นเป็นเหตุผลที่คุณได้รับข้อผิดพลาดนี้

ปัญหาเบื้องต้นสำหรับมุมมองของคุณไม่เกี่ยวข้องกับการตั้งค่าเส้นทางของคุณอย่างแน่นอน มีรหัสที่กำหนดเองเมื่อเรนเดอร์มุมมองจากคอนโทรลเลอร์หรือไม่?

person Jämes    schedule 17.05.2014

ฉันพบว่าหากการประกาศเส้นทางของคุณไม่ได้อยู่เหนือการประกาศเส้นทาง "ที่รับทั้งหมด" (โดยปกติแล้วผู้ปกครองของคุณจะดูตามที่คุณชี้ไว้) การประกาศเส้นทางนั้นจะเป็นค่าเริ่มต้นในแต่ละครั้ง ลองย้ายการประกาศเส้นทางไปเหนือสิ่งใดก็ตามที่ผู้ปกครองจะพยายามจับ

person user3036342    schedule 22.05.2014
comment
การประกาศเส้นทางสำหรับพื้นที่นั้นถูกเรียกจาก AreaRegistration ซึ่งถูกเรียกก่อน RouteConfig ใน global.asax.cs ของฉัน - person Jonas Arcangel; 22.05.2014