Panggil Tindakan di Pengontrol Dari Tampilan dan kirim parameter

Saya mencoba memanggil metode di dalam pengontrol di MVC dari tindakan javascript. Tindakan javascript seharusnya memanggil metode ini di dalam pengontrol dan mengirimkan beberapa parameter ke sana.

Kode Javascript saya terlihat seperti ini:

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

Metode saya didefinisikan sebagai berikut:

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

Namun, saat saya men-debug aplikasi, saat metode dipanggil, parameter MyId diteruskan sebagai null dan bukan sebagai nilai saat ini dari parameter MyId dalam model saya. Apa yang dapat saya lakukan untuk mengirim atau mengambil nilai ini dengan benar? Terima kasih!


person Luis Becerril    schedule 14.07.2014    source sumber


Jawaban (1)


Dalam definisi rute Anda, saya kira parameternya disebut {id} dan bukan {MyId}:

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

Jadi cobalah untuk lebih konsisten dan sesuaikan nama parameter tindakan pengontrol Anda:

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

Anda juga mungkin ingin menggunakan pembantu url daripada melakukan hardcoding beberapa pola url dalam kode javascript Anda:

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

Helper Url.Content digunakan untuk mereferensikan sumber daya statis di situs Anda seperti javascript, css, dan file gambar. Untuk tindakan pengontrol, lebih baik menggunakan metode pembantu Url.Action.

person Darin Dimitrov    schedule 14.07.2014