.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();
});
小弟還是個超級菜鳥,有許多不懂的地方還請各位大神指教了~
簡單說只能就是.modal()
這方法是要抓到單一個DOM
才能彈出
如果像上方回答得那樣一次抓多個的話
我想改這樣會有反應
$($('.modal')[0]).modal();
嘿!?我改成這樣依舊沒有任何反應耶
皓皓
有什麼錯誤嗎?
你show的那個function長怎樣貼一下吧
我就只是把你說的那行改掉而已耶
還是說不能這樣改嗎~
$(document).ready(function () {
$($('.modal')[0]).modal();
document.onload = M.AutoInit();
});
皓皓
你彈出的地方也要改一樣的抓法...
$($('.modal')[0]).modal('show')
你說彈出的地方是指前端嗎?
要怎麼改阿
皓皓
在你button click的地方呼叫啊@@
我指的是你說的要改一樣的抓法
我不知道原本button那邊要怎麼改QQ
因為原本不是直接用class去抓嗎
皓皓
大概講一下就是你在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>
Homura
終於解決了 謝謝你~
我另外想問一下
我要怎麼做到在新增或更新資料後
自動重新載入資料列呢?
皓皓
在controller寫一個action
然後modal跳出來新增資料打完
送出用ajax到這個action儲存
成功後回傳到前端跳出成功或失敗的訊息
注意那個action回傳訊息就好不是整個view
有解決記得給的正解@@
我指的是新增資料後
在前端頁面馬上刷新頁面
讓剛剛新增的資料可以直接SHOW在畫面上耶
因為我目前好像要手動按F5畫面才會更新
皓皓
2種方法
一種是直接加進table裡
另一種是你新增完整個table資料重新要一次
2種一定要ajax
你用razor是沒辦法達成的...
我查微軟文件有看到Blazor是不是有什麼渲染的方法
這東西有辦法達成嗎?
皓皓
那個需要特別的專案...
算是C#轉JS
那個不會比較好用....
還有
你用那個等於是自己放棄了豐富的前端套件庫
咦!? 是嘛
可是我新增專案的時候就是建Blazor耶
改成
$(document).ready(function () {
$('.modal').modal();
document.onload = M.AutoInit();
});
你的modal都是class不是id
class的話要用.modal
id才可以用#modal