我个人认为这是在许多ASP.Net MVC应用的许多意见,反复要求。
这就是为什么我定义的模型类和局部视图:
using Resources;
namespace YourNamespace.Models
{
public class SyConfirmationDialogModel
{
public SyConfirmationDialogModel()
{
this.DialogId = "dlgconfirm";
this.DialogTitle = Global.LblTitleConfirm;
this.UrlAttribute = "href";
this.ButtonConfirmText = Global.LblButtonConfirm;
this.ButtonCancelText = Global.LblButtonCancel;
}
public string DialogId { get; set; }
public string DialogTitle { get; set; }
public string DialogMessage { get; set; }
public string JQueryClickSelector { get; set; }
public string UrlAttribute { get; set; }
public string ButtonConfirmText { get; set; }
public string ButtonCancelText { get; set; }
}
}
而我的部分观点:
@using YourNamespace.Models;
@model SyConfirmationDialogModel
<div id="@Model.DialogId" title="@Model.DialogTitle">
@Model.DialogMessage
</div>
<script type="text/javascript">
$(function() {
$("#@Model.DialogId").dialog({
autoOpen: false,
modal: true
});
$("@Model.JQueryClickSelector").click(function (e) {
e.preventDefault();
var sTargetUrl = $(this).attr("@Model.UrlAttribute");
$("#@Model.DialogId").dialog({
buttons: {
"@Model.ButtonConfirmText": function() {
window.location.href = sTargetUrl;
},
"@Model.ButtonCancelText": function() {
$(this).dialog("close");
}
}
});
$("#@Model.DialogId").dialog("open");
});
});
</script>
然后,每次你需要它在一个视图的时候,你只需要使用@ Html.Partial(在部分脚本中做了JQuery定义):
@Html.Partial("_ConfirmationDialog", new SyConfirmationDialogModel() { DialogMessage = Global.LblConfirmDelete, JQueryClickSelector ="a[class=SyLinkDelete]"})
诀窍是指定JQu与需要确认对话框的元素相匹配的eryClickSelector。在我的情况下,与类SyLinkDelete所有锚,但它可能是一个标识符,不同类等对我来说是一个列表:
<a title="Delete" class="SyLinkDelete" href="/UserDefinedList/DeleteEntry?Params">
<img class="SyImageDelete" alt="Delete" src="/Images/DeleteHS.png" border="0">
</a>
有一个易于使用的插件在这里做到这一点:http://stackoverflow.com/questions/6457750/form-confirm-before-submit – 2012-09-27 11:36:46
一长串搜索解决方案: http://stackoverflow.com/a/18474005/1876355 – Pierre 2013-08-27 20:02:39