โดยส่วนตัวฉันเห็นว่านี่เป็นข้อกำหนดที่เกิดซ้ำในหลาย ๆ มุมมองของแอปพลิเคชัน 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]"})
เคล็ดลับคือการระบุ JQueryClickSelector ที่จะตรงกับองค์ประกอบที่จำเป็นต้องมีกล่องโต้ตอบการยืนยัน ในกรณีของฉันแองเคอร์ทั้งหมดที่มีคลาส SyLinkDelete แต่อาจเป็นตัวระบุคลาสอื่นที่แตกต่างกันสำหรับฉันมันคือรายการของ:
<a title="Delete" class="SyLinkDelete" href="/UserDefinedList/DeleteEntry?Params">
<img class="SyImageDelete" alt="Delete" src="/Images/DeleteHS.png" border="0">
</a>