[bootstrap][jquery][asp.net mvc]如何簡易實做bootrap的開窗Modal

  • 933
  • 0
  • 2023-11-28

[bootstrap][jquery][asp.net mvc]如何簡易實做bootrap的開窗Modal

首先是按鈕,html裡面的按鈕,按下去之後就可以跳出開窗,以及關閉開窗的按鈕:

<button name="showModal" type="button" class="btn btn-success col-auto">開啟</button>
<button class="btn btn-primary" id="btnCloseModal" onclick="$('#divAuditCorrectModal').modal('hide')">關閉</button>
<!--隱藏的iis應用程式的路徑-->
<input type="hidden" id="hidAppPath" value="@Url.Content("~/")" />


接著於jquery綁定此按鈕的click事件:
由於本例子是把上面的按鈕放在DatatablesNet的Datatable裡面,所以下面js會有跟datatable相關的程式碼。

//開啟modal視窗:顯示稽核報表
$(document).on('click', 'button[name=showModal]', function (e) {
    e.preventDefault();
    var table = $('#example').DataTable();
    var tr = $(this).closest('tr');

    //取得此列的參數,用來傳遞參數到開窗
    var data = table.row(tr).data();

    console.log(data);

    //取得稽核表問題並顯示開窗
    GetMyAjaxContent(data.PlanAchieveDetailID, data.TemplateID);
    $("#divMyModal").modal('show');

})
function GetMyAjaxContent(planAchieveDetailID, templateID) {
    var appPath = $("#hidAppPath").val();
    return $.ajax({
        type: 'POST',

        url: appPath + 'MyController/GetMyAjaxContent/',
        data: {
            MyKey1: key1,
            MyKey2: key2,

        },

        success: function (resultData) {
            //顯示開窗
            console.log('成功取得db端的data:')
            console.log(resultData);
            //do something you want
            
            //顯示開窗
            $("#divMyModal").modal('show');
        },
        error: function (error) {
            console.log(error);
            alert('出現意料之外的錯誤,請查看F12的writeLog()紀錄。');
        },
    });
}


Controller的c#程式碼如下:

[HttpPost]
public ActionResult GetMyAjaxContent(MyModel model)
{
	if (model == null)
	{
		return Json(new EmptyResult());
	}

	MyDbContext dal = new MyDbContext();
	var modalData = dal.DoMyBusinessLogic(model);

	return Json(modalData);

}

 以下是開窗div的html:
內容包含怎麼簡單排版開窗的html,關閉開窗的button長甚麼樣子…等等,內有許多註解,可自行參考


<div class="row">
   <!--
      「data-backdrop="static"」 鎖定背景,點擊背景時不自動關閉視窗
      「fade」 淡入、淡出的轉場效果
      「modal-lg」視窗大小,如modal-lg、modal-md、modal-sm
      「data-dismiss="modal"」 關閉視窗
      「data-keyboard="true"」 是否用ESC鍵關閉,預設為true
	  「modal-dialog-centered」將modal視窗置中於螢幕正中間,若移除此class,則modal視窗的位置會在螢幕的上方
      -->
   <div id="divMyModal" class="modal inmodal fade" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="true">
      <div class="modal-dialog modal-xl modal-dialog-centered">
         <div class="modal-content">
            <div class="modal-header" style="width:100%;">
               <h5 class="modal-title text-center">我的大標題</h5>
               <input type="hidden" id="hidMyKey1" />
            </div>
            <div class="modal-body divCenterAlign" style="">
               <table border="1" class="table" width="100%" style="">
                  <tbody>
                     <tr class="d-flex">
                        <td class="col-1">表格的第一個td</td>
                        <td class="col-11">
                           <label id="lblMyLabel1" style="font-size:x-large"></label>
                        </td>
                     </tr>
                     <tr class="d-flex">
                        <td class="col-1">表格的第2個td</td>
                        <td class="col-11">
                           <label id="lblMyLabel2"></label>
                        </td>
                     </tr>
                  </tbody>
               </table>
            </div>
            <div class="modal-footer">
               <button class="btn btn-success" id="btnSave" onclick="Save()">儲存</button>                
               <button class="btn btn-primary" id="btnCloseModal" onclick="$('#divMyModal').modal('hide')">關閉</button>
            </div>
         </div>
      </div>
   </div>
</div>


要特別補充的是,上面提到的{「modal-lg」視窗大小,如modal-lg、modal-md、modal-sm}如果仍無法符合開窗大小的需求的話,就得要客製化開窗的寬度或高度,需搭配特殊css的css media query如下:

/*開窗的寬度寬一點,方便使用者填寫資料*/
@media (min-width: 768px) {
    .modal-xl {
        width: 95%;
        max-width: 1300px;
    }
}

 

最後開窗結果如下:

 

這篇大概是這樣…

參考資料:
工作經驗