Razor view memiliki 3 tombol dalam bentuk. Semua tombol's tindakan akan membutuhkan bentuk nilai-nilai yang pada dasarnya adalah nilai-nilai yang datang field input.
Setiap kali saya klik tombol itu saya diarahkan ke default action. Bisakah anda memandu bagaimana saya dapat mengirimkan formulir untuk tindakan yang berbeda berdasarkan pada tombol tekan ?
Saya benar-benar menghargai waktu, bimbingan dan bantuan.
Anda juga bisa mencoba ini:
<input type="submit" name="submitbutton1" value="submit1" />
<input type="submit" name="submitbutton2" value="submit2" />
Kemudian dalam fungsi default anda memanggil fungsi-fungsi yang anda inginkan:
if( Request.Form["submitbutton1"] != null)
{
// Code for function 1
}
else if(Request.Form["submitButton2"] != null )
{
// code for function 2
}
Ini solusi elegan bekerja untuk jumlah tombol submit:
@Html.Begin()
{
// Html code here
<input type="submit" name="command" value="submit1" />
<input type="submit" name="command" value="submit2" />
}
Dan di pengontrol' tindakan metode menerimanya sebagai parameter.
public ActionResult Create(Employee model, string command)
{
if(command.Equals("submit1"))
{
// Call action here...
}
else
{
// Call another action here...
}
}
dalam pandangan
<form action="/Controller_name/action" method="Post>
<input type="submit" name="btn1" value="Ok" />
<input type="submit" name="btn1" value="cancel" />
<input type="submit" name="btn1" value="Save" />
</form>
dalam aksi
string str =Request.Params["btn1"];
if(str=="ok"){
}
if(str=="cancel"){
}
if(str=="save"){
}
Anda dapat menggunakan JS + Ajax. Misalnya, jika anda memiliki setiap tombol anda dapat mengatakan apa yang harus dilakukan pada acara klik. Berikut kode:
<input id="btnFilterData" type="button" value="myBtn">
Di sini anda tombol di html: dalam naskah bagian, anda perlu menggunakan kode ini (bagian Ini harus di akhir dokumen):
<script type="text/javascript">
$('#btnFilterData').click(function () {
myFunc();
});
</script>
Dan akhirnya, anda perlu menambahkan fungsi ajax (Di script lain bagian, yang harus ditempatkan pada awal dokumen):
function myFunc() {
$.ajax({
type: "GET",
contentType: "application/json",
url: "/myController/myFuncOnController",
data: {
//params, which you can pass to yu func
},
success: function(result) {
error: function (errorData) {
}
});
};
Terbersih solusi I've ditemukan adalah sebagai berikut:
Contoh ini adalah untuk melakukan dua tindakan yang berbeda; premis dasar adalah dengan menggunakan
Dalam pandangan anda:
@using (Html.BeginForm("DliAction", "Dli", FormMethod.Post, new { id = "mainForm" }))
{
if (isOnDli)
{
<button name="removeDli" value="@result.WeNo">Remove From DLI</button>
}
else
{
<button name="performDli" value="@result.WeNo">Perform DLI</button>
}
}
Kemudian dalam tindakan anda:
public ActionResult DliAction(string removeDli, string performDli)
{
if (string.IsNullOrEmpty(performDli))
{
...
}
else if (string.IsNullOrEmpty(removeDli))
{
...
}
return View();
}
Kode ini harus mudah untuk mengubah dalam rangka untuk mencapai variasi selain tema, misalnya mengubah tombol's nama yang sama, maka anda hanya membutuhkan satu parameter pada action dll, seperti dapat dilihat di bawah ini:
Dalam pandangan anda:
@using (Html.BeginForm("DliAction", "Dli", FormMethod.Post, new { id = "mainForm" }))
{
<button name="weNo" value="@result.WeNo">Process This WeNo</button>
<button name="weNo" value="@result.WeNo">Process A Different WeNo This Item</button>
}
Kemudian dalam tindakan anda:
public ActionResult DliAction(string weNo)
{
// Process the weNo...
return View();
}
Cobalah membungkus masing-masing tombol di it's sendiri formulir dalam tampilan anda.
@using (Html.BeginForm("Action1", "Controller"))
{
<input type="submit" value="Button 1" />
}
@using (Html.BeginForm("Action2", "Controller"))
{
<input type="submit" value="Button 2" />
}
Anda bisa menggunakan tombol normal(non kirim). Menggunakan javascript untuk menulis ulang (di 'onclick' event) bentuk's 'action' atribut untuk sesuatu yang anda inginkan dan kemudian mengirimkannya. Membuat tombol menggunakan custom helper(membuat file "Penolong.cshtml" di dalam folder App_Code, akar dari proyek anda) .
@helper SubmitButton(string text, string controller,string action)
{
var uh = new System.Web.Mvc.UrlHelper(Context.Request.RequestContext);
string url = @uh.Action(action, controller, null);
<input type=button onclick="(
function(e)
{
$(e).parent().attr('action', '@url'); //rewrite action url
//create a submit button to be clicked and removed, so that onsubmit is triggered
var form = document.getElementById($(e).parent().attr('id'));
var button = form.ownerDocument.createElement('input');
button.style.display = 'none';
button.type = 'submit';
form.appendChild(button).click();
form.removeChild(button);
}
)(this)" value="@text"/>
}
Dan kemudian menggunakannya sebagai:
@Helpers.SubmitButton("Text for 1st button","ControllerForButton1","ActionForButton1")
@Helpers.SubmitButton("Text for 2nd button","ControllerForButton2","ActionForButton2")
...
Dalam formulir anda.
Cara paling sederhana adalah dengan menggunakan html5 FormAction
dan FormMethod
<input type="submit"
formaction="Save"
formmethod="post"
value="Save" />
<input type="submit"
formaction="SaveForLatter"
formmethod="post"
value="Save For Latter" />
<input type="submit"
formaction="SaveAndPublish"
formmethod="post"
value="Save And Publish" />
[HttpPost]
public ActionResult Save(CustomerViewModel model) {...}
[HttpPost]
public ActionResult SaveForLatter(CustomerViewModel model){...}
[HttpPost]
public ActionResult SaveAndPublish(CustomerViewModel model){...}
Ada banyak cara lain yang dapat kita gunakan, lihat artikel ini ASP.Net MVC beberapa tombol submit digunakan dalam cara yang berbeda
Ini adalah apa yang bekerja untuk saya.
formaction="@Url.Action("Edit")"
Cuplikan :
<input type="submit" formaction="@Url.Action("Edit")" formmethod="post" value="Save" class="btn btn-primary" />
<input type="submit" formaction="@Url.Action("PartialEdit")" formmethod="post" value="Select Type" class="btn btn-primary" />
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit( Quote quote)
{
//code
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult PartialEdit(Quote quote)
{
//code
}
Mungkin bisa membantu beberapa orang yang ingin memiliki 2 tindakan yang berbeda metode, bukan satu metode yang menggunakan penyeleksi atau menggunakan client script .
Dalam kasus anda're murni menggunakan razor, yaitu tidak ada MVC controller:
<button name="SubmitForm" value="Hello">Hello</button>
<button name="SubmitForm" value="World">World</button>
@if (IsPost)
{
<p>@Request.Form["SubmitForm"]</p>
}
Mengklik masing-masing tombol harus membuat keluar Hello dan Dunia.
Jawaban ini akan menunjukkan kepada anda bagaimana untuk bekerja di asp.net dengan pisau cukur, dan untuk mengontrol beberapa tombol submit acara. Memungkinkan misalnya kita memiliki dua tombol, satu tombol akan mengarahkan kita untuk "PageA.cshtml" dan lain-lain akan mengarahkan kita untuk "PageB.cshtml".
@{
if (IsPost)
{
if(Request["btn"].Equals("button_A"))
{
Response.Redirect("PageA.cshtml");
}
if(Request["btn"].Equals("button_B"))
{
Response.Redirect("PageB.cshtml");
}
}
}
<form method="post">
<input type="submit" value="button_A" name="btn"/>;
<input type="submit" value="button_B" name="btn"/>;
</form>
Didn't melihat jawaban menggunakan tag pembantu (Core MVC), jadi di sini ia pergi (untuk menghapus tindakan):
Pada HTML:
<form action="" method="post" role="form">
<table>
@for (var i = 0; i < Model.List.Count(); i++)
{
<tr>
<td>@Model.List[i].ItemDescription</td>
<td>
<input type="submit" value="REMOVE" class="btn btn-xs btn-danger"
asp-controller="ControllerName" asp-action="delete" asp-route-idForDeleteItem="@Model.List[i].idForDeleteItem" />
</td>
</tr>
}
</table>
</form>
Di Controller:
[HttpPost("[action]/{idForDeleteItem}"), ActionName("Delete")]
public async Task<IActionResult> DeleteConfirmed(long idForDeleteItem)
{
///delete with param id goes here
}
Don't lupa untuk menggunakan [Rute("[controller]")]
SEBELUM deklarasi kelas - pada controller.