Ada tiga cara yang dapat digunakan untuk menyelesaikan masalah di atas
- Cara HTML
- Cara jquery
- Cara "ActionNameSelectorAttribute"
Di bawah ini adalah video yang merangkum ketiga pendekatan secara demonstratif.
https://www.facebook.com/shivprasad.koirala/videos/vb.100002224977742/809335512483940
Cara HTML: -
Dengan cara HTML kita perlu membuat dua formulir dan menempatkan tombol "Kirim" di dalam masing-masing formulir. Dan setiap tindakan bentuk akan menunjuk ke tindakan yang berbeda / masing-masing. Anda dapat melihat kode di bawah ini formulir pertama memposting ke "Action1" dan bentuk kedua akan memposting ke "Action2" tergantung pada tombol "Kirim" yang diklik.
<form action="Action1" method=post>
<input type=”submit” name=”Submit1”/>
</form>
<form action="Action2" method=post>
<input type=”submit” name=”Submit2”>
</form>
Cara Ajax: -
Jika Anda seorang pecinta Ajax, opsi kedua ini akan membuat Anda lebih bergairah. Dengan cara Ajax kita dapat membuat dua fungsi berbeda "Fun1" dan "Fun1", lihat kode di bawah ini. Fungsi-fungsi ini akan membuat panggilan Ajax dengan menggunakan JQUERY atau kerangka kerja lainnya. Masing-masing fungsi ini diikat dengan acara "Kirim" tombol "OnClick". Masing-masing fungsi melakukan panggilan ke nama tindakan masing-masing.
<Script language="javascript">
function Fun1()
{
$.post(“/Action1”,null,CallBack1);
}
function Fun2()
{
$.post(“/Action2”,null,CallBack2);
}
</Script>
<form action="/Action1" method=post>
<input type=submit name=sub1 onclick=”Fun2()”/>
</form>
<form action="/Action2" method=post>
<input type=submit name=sub2 onclick=”Fun1()”/>
</form>
Menggunakan "ActionNameSelectorAttribute": -
Ini adalah opsi yang bagus dan bersih. "ActionNameSelectorAttribute" adalah kelas atribut sederhana di mana kita dapat menulis logika pengambilan keputusan yang akan memutuskan tindakan mana yang dapat dieksekusi.
Jadi hal pertama adalah dalam HTML kita harus meletakkan nama yang tepat untuk tombol kirim untuk mengidentifikasi mereka di server.
Anda dapat melihat kami telah memasukkan "Simpan" dan "Hapus" ke nama tombol. Anda juga dapat melihat dalam tindakan yang baru saja kita masukkan nama pengontrol "Pelanggan" dan bukan nama tindakan tertentu. Kami berharap nama tindakan akan diputuskan oleh "ActionNameSelectorAttribute".
<form action=”Customer” method=post>
<input type=submit value="Save" name="Save" /> <br />
<input type=submit value="Delete" name="Delete"/>
</form>
Jadi ketika tombol kirim diklik, itu pertama hits atribut "ActionNameSelector" dan kemudian tergantung pada yang mengirimkan dipecat itu memanggil tindakan yang sesuai.
Jadi langkah pertama adalah membuat kelas yang mewarisi dari kelas "ActionNameSelectorAttribute". Di kelas ini kami telah membuat properti sederhana "Nama".
Kita juga perlu mengganti fungsi "IsValidName" yang mengembalikan true atau flase. Fungsi ini adalah tempat kita menulis logika apakah suatu tindakan harus dijalankan atau tidak. Jadi jika fungsi ini mengembalikan true maka tindakan dieksekusi atau tidak.
public class SubmitButtonSelector : ActionNameSelectorAttribute
{
public string Name { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
{
// Try to find out if the name exists in the data sent from form
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
}
}
Jantung utama dari fungsi di atas adalah dalam kode di bawah ini. Koleksi "ValueProvider" memiliki semua data yang telah diposting dari formulir. Jadi pertama-tama mencari nilai "Nama" dan jika ditemukan dalam permintaan HTTP, ia mengembalikan nilai true atau ia mengembalikan nilai false.
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
Kelas atribut ini kemudian dapat didekorasi dengan aksi masing-masing dan nilai "Nama" masing-masing dapat diberikan. Jadi jika kiriman memukul tindakan ini dan jika nama yang cocok dengan HTML kirimkan nama tombol itu maka jalankan tindakan lebih lanjut atau yang tidak.
public class CustomerController : Controller
{
[SubmitButtonSelector(Name="Save")]
public ActionResult Save()
{
return Content("Save Called");
}
[SubmitButtonSelector(Name = "Delete")]
public ActionResult Delete()
{
return Content("Delete Called");
}
}