この質問では、送信ボタンを無効にして複数のポストバックを防ぐことは、(悪意のない) ユーザーが複数回ポストバックするのを止める実行可能な解決策でした。
ビューに複数の送信ボタンがある場合、このオプションはうまく機能しません。次の例を見てください。
//意見:
@using (Html.BeginForm("Catalog", "Images", FormMethod.Post, new { onsubmit = "Utility.disable_buttons(this.id);", id = "catalog_form" }))
{
<p>
<input type="submit" name="btnSubmit" value="Clear" /> |
<input type="submit" name="btnSubmit" value="Catalog" /> |
<input type="submit" name="btnSubmit" value="Update" /> |
@Html.ActionLink("Back to List", "Index")
</p>
}
//コントローラ:
[HttpPost]
public ActionResult Catalog(string btnSubmit)
{
switch (btnSubmit)
{
case "Catalog":
//More differenter code
break;
case "Clear":
//Different code
break;
case "Nothing":
//Code
break;
}
return View();
}
ビューには、3 つの異なる送信アクションがあります。ボタンが無効になっている場合、それらの値は渡されず、コントローラーは送信をトリガーしたボタンを認識できません。(コントローラーは常に null になります。) 残念ながら、submitdisabledcontrols 属性は MVC でこの問題を解決していないようです。無効なコントロールの値をサーバーに渡す方法を知っている人はいますか?