如何将Razor Pages复选框单击事件绑定到服务器端代码 [英] How to bind a Razor Pages checkbox click event to server-side code
本文介绍了如何将Razor Pages复选框单击事件绑定到服务器端代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Razor页面上有一个项目列表,每个项目都有一个复选框。我希望在勾选或取消勾选某个复选框时,将信息发送到该页面后面的服务,然后使用发生新设置的时间更新列表。
它不是一个按钮,而是一个复选框,所以我不确定在这种情况下如何使用<form>
。如果正在等待的图标可以在操作进行期间旋转,那就更好了。
我可以使用什么?我的PageModel
类上是否可以有一个执行此操作的方法?
推荐答案
好,总结我的调查结果。
- 在页面上创建一个处理程序方法,名为
OnPostMyAction
。获取所需的参数。
// itemId can also be Guid
public async Task<IActionResult> OnPostMyAction(long itemId, bool isEnabled)
{
await mRepository.EnableItem(itemId, isEnabled);
return new OkResult();
}
- 在页面的
Scripts
部分创建JS函数。
function requestMyAction(itemId, isChecked, loaderId) {
document.getElementById(loaderId).style.display = "inline-block";
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (this.readyState === 4) {
document.getElementById(loaderId).style.display = "none";
if (this.status === 200) {
// Ok
}
}
};
var url = '@Url.Page("/PageName", "MyAction")';
xhr.open('POST', url);
xhr.setRequestHeader('RequestVerificationToken', '@Xsrf.GetAndStoreTokens(Model.HttpContext).RequestToken');
var data = new FormData();
data.append('itemId', itemId);
data.append('isEnabled', isChecked);
xhr.send(data);
}
我知道有一个fetch
接口,也许有人可以在这里写一个新的实现:-)我没有JS经验,所以我拿了我在或多或少实现状态下找到的东西。
- 在页面开始处注入防伪机制。
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
- 在css中添加
loader
类:
.loader {
border: 6px solid #f3f3f3; /* Light grey */
border-top: 6px solid #3498db; /* Blue */
border-radius: 50%;
width: 30px;
height: 30px;
animation: loaderSpin 2s linear infinite;
}
@keyframes loaderSpin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
- 添加一个单击处理程序和一个
loader
元素(可能在复选框旁边)。
<input asp-for="@item.IsEnabled"
onclick="requestMyAction('@item.Id', this.checked, 'loader-@item.Id');" />
<div class="loader" style="display: none;" id="loader-@item.Id"></div>
这篇关于如何将Razor Pages复选框单击事件绑定到服务器端代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文