iT邦幫忙

0

Modal在foreach內無法正常彈出,但單獨測試卻沒問題

  • 分享至 

  • xImage

.razor

@foreach (var productrecord in product)
{
    <tr>
        <td>@productrecord.Id</td>
        <td>@productrecord.ProductName</td>
        <td>@productrecord.ProductCode</td>
        <td>
            <!-- Modal Trigger -->
            <button data-target="editmodal@(productrecord.Id)" class="waves-effect waves-light btn modal-trigger">
                                        <i class="Tiny material-icons right">mode_edit</i>編輯</button>
            <!-- Modal Structure -->
            <div id="editmodal@(productrecord.Id)" class="modal">
                <div class="modal-content">
                    <h5>編輯</h5>
                    <p>A bunch of text</p>
                </div>
                <div class="modal-footer">
                    <button class="waves-effect waves-light btn" @onclick="()=>UpdateProduct(productrecord)">儲存</button>
                </div>
            </div>
            <!-- Modal Trigger -->
            <button data-target="deletemodal@(productrecord.Id)" class="waves-effect waves-light btn modal-trigger">
                                        <i class="Tiny material-icons right">delete</i>刪除</button>
            <!-- Modal Structure -->
            <div id="deletemodal@(productrecord.Id)" class="modal">
                <div class="modal-content">
                    <h5>是否要刪除?</h5>
                </div>
                <div class="modal-footer">
                    <button class="waves-effect waves-light btn" @onclick="()=>DeleteProduct(productrecord)">刪除</button>
                </div>
            </div>
        </td>
    </tr>
}

@code {
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {

        await base.OnAfterRenderAsync(firstRender);
        if (firstRender)
        {
            await JS.InvokeVoidAsync("M.AutoInit");

        }
    }
}

.js

$(document).ready(function () {
    $('#modal').modal();
    document.onload = M.AutoInit();
});

小弟還是個超級菜鳥,有許多不懂的地方還請各位大神指教了~

Homura iT邦高手 1 級 ‧ 2022-02-23 13:47:03 檢舉
話說你把modal放在foreah裡面
不是變成多個modal...
皓皓 iT邦新手 2 級 ‧ 2022-02-23 13:50:35 檢舉
咦~ 是我用錯方法了嗎
我的想法是想在每一筆資料後面加上編輯和刪除的按鈕
在按下按鈕後跳出modal的彈出視窗
來達到確認是否刪除或編輯內容的功能
Homura iT邦高手 1 級 ‧ 2022-02-23 13:53:22 檢舉
正常應該ㄧ個modal就好...
然後點按鈕把值帶到目前選擇到變數上
辨識目前選到是哪一列
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
Homura
iT邦高手 1 級 ‧ 2022-02-23 13:52:23
最佳解答

簡單說只能就是.modal()這方法是要抓到單一個DOM
才能彈出
如果像上方回答得那樣一次抓多個的話
我想改這樣會有反應

$($('.modal')[0]).modal();
看更多先前的回應...收起先前的回應...
皓皓 iT邦新手 2 級 ‧ 2022-02-23 14:56:20 檢舉

嘿!?我改成這樣依舊沒有任何反應耶

Homura iT邦高手 1 級 ‧ 2022-02-23 15:24:41 檢舉

皓皓
有什麼錯誤嗎?
你show的那個function長怎樣貼一下吧

皓皓 iT邦新手 2 級 ‧ 2022-02-23 15:49:55 檢舉

我就只是把你說的那行改掉而已耶
還是說不能這樣改嗎~

$(document).ready(function () {
    $($('.modal')[0]).modal();
    document.onload = M.AutoInit();
});
Homura iT邦高手 1 級 ‧ 2022-02-23 15:52:58 檢舉

皓皓
你彈出的地方也要改一樣的抓法...

$($('.modal')[0]).modal('show')
皓皓 iT邦新手 2 級 ‧ 2022-02-23 15:54:50 檢舉

你說彈出的地方是指前端嗎?
要怎麼改阿/images/emoticon/emoticon02.gif

Homura iT邦高手 1 級 ‧ 2022-02-23 16:11:57 檢舉

皓皓
在你button click的地方呼叫啊@@

皓皓 iT邦新手 2 級 ‧ 2022-02-23 16:18:31 檢舉

我指的是你說的要改一樣的抓法
我不知道原本button那邊要怎麼改QQ
因為原本不是直接用class去抓嗎

Homura iT邦高手 1 級 ‧ 2022-02-23 16:29:13 檢舉

皓皓
大概講一下就是你在click的時候教出的modal為同一個
但是modal在叫出來之前
會帶入資料你目前click那行的資料
簡單寫一段

@foreach (var productrecord in product)
{
    <tr>
        <td>@productrecord.Id</td>
        <td>@productrecord.ProductName</td>
        <td>
            <button onclick="editBtn('@productrecord.Id')">讀取</button>
        </td>
    </tr>
}


<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">×</span>
        </button>
      </div>
      <div class="modal-body">
        <p id="rowId"></p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

<script>
    function editBtn(id)
    {
        // 帶入目前選擇的資料
        $('#rowId').text(id)
        $('#exampleModal').modal('show')
    }
</script>

皓皓 iT邦新手 2 級 ‧ 2022-02-24 11:40:19 檢舉

Homura
終於解決了 謝謝你~
我另外想問一下
我要怎麼做到在新增或更新資料後
自動重新載入資料列呢?

Homura iT邦高手 1 級 ‧ 2022-02-24 13:10:10 檢舉

皓皓
在controller寫一個action
然後modal跳出來新增資料打完
送出用ajax到這個action儲存
成功後回傳到前端跳出成功或失敗的訊息
注意那個action回傳訊息就好不是整個view
有解決記得給的正解@@

皓皓 iT邦新手 2 級 ‧ 2022-02-24 13:26:01 檢舉

我指的是新增資料後
在前端頁面馬上刷新頁面
讓剛剛新增的資料可以直接SHOW在畫面上耶
因為我目前好像要手動按F5畫面才會更新

Homura iT邦高手 1 級 ‧ 2022-02-24 13:37:31 檢舉

皓皓
2種方法
一種是直接加進table裡
另一種是你新增完整個table資料重新要一次
2種一定要ajax
你用razor是沒辦法達成的...

皓皓 iT邦新手 2 級 ‧ 2022-02-24 13:56:42 檢舉

我查微軟文件有看到Blazor是不是有什麼渲染的方法
這東西有辦法達成嗎?

Homura iT邦高手 1 級 ‧ 2022-02-24 14:03:31 檢舉

皓皓
那個需要特別的專案...
算是C#轉JS
那個不會比較好用....
還有
你用那個等於是自己放棄了豐富的前端套件庫

皓皓 iT邦新手 2 級 ‧ 2022-02-24 14:32:17 檢舉

咦!? 是嘛
可是我新增專案的時候就是建Blazor耶/images/emoticon/emoticon02.gif

Homura iT邦高手 1 級 ‧ 2022-02-24 14:40:54 檢舉

皓皓
不用我講
你自己Google看看有多少資源就知道...
而且前端生態已經那麼成熟
大部分前端還會美工
你用Blazor等於前端無法作業....
也不能用既有的前端套件庫

皓皓 iT邦新手 2 級 ‧ 2022-02-24 16:13:41 檢舉

原來如此...
所以Blazor就是功能比較少但較好上手的語言嗎?

Homura iT邦高手 1 級 ‧ 2022-02-24 16:51:49 檢舉

皓皓
是的
他就是給不會寫JS的C#工程師
但是也像上面說的很多現成的JS函式庫或框架已經很多可用
用Blazor肯定沒有

1
tryit
iT邦研究生 4 級 ‧ 2022-02-23 12:38:57

改成

$(document).ready(function () {
    $('.modal').modal();
    document.onload = M.AutoInit();
});

你的modal都是class不是id
class的話要用.modal
id才可以用#modal

皓皓 iT邦新手 2 級 ‧ 2022-02-23 13:12:17 檢舉

原來如此
可是我剛剛改完後還是一樣沒有反應耶~

tryit iT邦研究生 4 級 ‧ 2022-02-23 14:20:53 檢舉

誒都,其他人補充了(攤手

我要發表回答

立即登入回答