Mvcコントローラーで確認ボックスを作成する必要がありますか?この「はい」または「いいえ」の値を使用して、コントローラーでアクションを実行する必要があります。どうやってやるの?
サンプルコード:
public ActionResult ActionName(passing value)
{
// some code
message box here
if (true)
{ true code}
else { else code}
}
コントローラでは確認ボックスを作成しませんが、ビューではJQueryダイアログを使用して確認ボックスを作成します。コントローラはすでにサーバー内にあるため、ユーザーとのやり取りはありません。一方、ビューは、ユーザーがオプションを選択したり、情報を入力したり、ボタンをクリックしたりする場所です。ボタンのクリックをインターセプトしてダイアログを表示し、オプション「はい「クリックされます。
JQueryダイアログにはjquery.js、jquery-ui.js、jquery.ui.dialog.jsページで参照されるスクリプトが必要です。
例:
$(function(){
$("#buttonID").click(function(event) {
event.preventDefault();
$('<div title="Confirm Box"></div>').dialog({
open: function (event, ui) {
$(this).html("Yes or No question?");
},
close: function () {
$(this).remove();
},
resizable: false,
height: 140,
modal: true,
buttons: {
'Yes': function () {
$(this).dialog('close');
$.post('url/theValueYouWantToPass');
},
'No': function () {
$(this).dialog('close');
$.post('url/theOtherValueYouWantToPAss');
}
}
});
});
});
あなたはActionLinkでこれを行うことができます
@Html.ActionLink(
"Delete",
"DeleteAction",
"Product",
new { confirm = true, other_parameter = "some_more_parameter" },
new { onclick = "return confirm('Do you really want to delete this product?')" })
ユーザーが確認すると、リンクパラメータがコントローラアクションメソッドに渡されます。
public ActionResult DeleteAction(bool confirm, string other_parameter)
{
// if user confirm to delete then this action will fire
// and you can pass true value. If not, then it is already not confirmed.
return View();
}
更新
コントローラ側ではメッセージボックスを表示できません。しかし、あなたは次のようにこれを行うことができます
public ActionResult ActionName(passing value)
{
// some code
message box here
if (true){ ViewBag.Status = true }
else { ViewBag.Status = false}
return View();
}
そして見る
<script type="text/javascript">
function() {
var status = '@ViewBag.Status';
if (status) {
alert("success");
} else {
alert("error");
}
}
</script>
しかし、これらすべてのコードはエレガントな方法ではありません。これはあなたのscenerioの解決策です。
はい、AliRızaAdıyahşiがコメントしているように、@Html.ActionLink
でこれを行うことができます。
@Html.ActionLink
のonclick
イベントを購読する
ここに実装があります:
@Html.ActionLink("Click here","ActionName","ControllerName",new { @onclick="return Submit();"})
そしてJavaScriptでconfirm
ボックスを書きます。
<script type="text/javascript">
function Submit() {
if (confirm("Are you sure you want to submit ?")) {
return true;
} else {
return false;
}
}
</script>
編集
このようにしてみてください:
<script type="text/javascript">
function Submit() {
if (confirm("Are you sure you want to submit ?")) {
document.getElementById('anchortag').href += "?isTrue=true";
} else {
document.getElementById('anchortag').href += "?isTrue=false";
}
return true;
}
</script>
@Html.ActionLink("Submit", "Somemethod", "Home", new { @onclick = "return Submit();", id = "anchortag" })
コントローラで、isTrue
クエリ文字列に基づいていくつかの操作を実行します
public ActionResult Somemethod(bool isTrue)
{
if (isTrue)
{
//do something
}
else
{
//do something
}
return View();
}
AliRızaAdıyahşiのソリューションがうまく機能していることを確認できます。
メッセージをカスタマイズすることもできます。私の場合、MVCとRazorを使用しているので、次のようにできます。
<td>
@Html.ActionLink("Delete",
"DeleteTag", new { id = t.IDTag },
new { onclick = "return confirm('Do you really want to delete the tag " + @t.Tag + "?')" })
</td>
名前が付けられた特定のレコードを持つダイアログが表示されました。確認ダイアログにタイトルを付けることも可能かもしれませんが、まだ試していません。
<a href="@Url.Action("DeleteBlog", new {id = @post.PostId})" class="btn btn-sm btn-danger" onclick="return confirm ('Are you sure want to delete blog?');">
<i class="glyphicon glyphicon-remove"></i> Delete