เรียกใช้การดำเนินการในคอนโทรลเลอร์จากมุมมองและส่งพารามิเตอร์

ฉันกำลังพยายามเรียกวิธีการภายในคอนโทรลเลอร์ใน MVC จากการกระทำของจาวาสคริปต์ การกระทำของจาวาสคริปต์ควรเรียกใช้เมธอดนี้ภายในคอนโทรลเลอร์และส่งพารามิเตอร์บางตัวไป

รหัส Javascript ของฉันมีลักษณะดังนี้:

location.href = '@Url.Content("~/Areas/MyArea/MyMethod/"+Model.MyId)';

วิธีการของฉันถูกกำหนดดังนี้:

[HttpGet] 
public ActionResult MyMethod(int? MyId) 
{ 
   doSomething(MyId); 
   return View("MyView"); 
}

อย่างไรก็ตาม เมื่อฉันดีบักแอปพลิเคชัน เมื่อเมธอดนี้เรียกว่าพารามิเตอร์ MyId ถูกส่งผ่านเป็นค่าว่าง และไม่ใช่ค่าปัจจุบันของพารามิเตอร์ MyId ในโมเดลของฉัน ฉันจะทำอย่างไรเพื่อส่งหรือดึงค่านี้อย่างถูกต้อง ขอบคุณ!


person Luis Becerril    schedule 14.07.2014    source แหล่งที่มา


คำตอบ (1)


ในการกำหนดเส้นทางของคุณ ฉันคิดว่าพารามิเตอร์เรียกว่า {id} ไม่ใช่ {MyId}:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "MyArea_default",
        "MyArea/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

ดังนั้นพยายามทำให้สอดคล้องกันมากขึ้นและปรับชื่อพารามิเตอร์การกระทำของคอนโทรลเลอร์ให้สอดคล้อง:

[HttpGet] 
public ActionResult MyMethod(int? id) 
{ 
    doSomething(id); 
    return View("MyView");
}

นอกจากนี้คุณอาจต้องการใช้ตัวช่วย url แทนการเข้ารหัสรูปแบบ URL บางส่วนในโค้ดจาวาสคริปต์ของคุณ:

window.location.href = '@Url.Action("MyMethod", "SomeControllerName", new { area = "MyArea", id = Model.MyId })';

ตัวช่วย Url.Content ใช้เพื่ออ้างอิงทรัพยากรแบบคงที่ในไซต์ของคุณ เช่น ไฟล์ javascript, css และรูปภาพ สำหรับการดำเนินการของคอนโทรลเลอร์ จะดีกว่ามากถ้าใช้เมธอด Url.Action helper

person Darin Dimitrov    schedule 14.07.2014