You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core MVC中实现Accept功能:点击后禁用编辑并隐藏按钮

实现点击Accept按钮后禁用编辑并隐藏按钮的方案

一、前端纯JavaScript实现(无需后端交互)

直接在视图页面编写HTML结构和JS逻辑,点击Accept按钮后立即禁用所有可编辑表单元素,并隐藏指定按钮。

视图代码(.cshtml)

<form id="editForm">
    <!-- 示例表单控件 -->
    <div class="form-group">
        <label>姓名</label>
        <input type="text" class="form-control" name="Name" value="测试用户" />
    </div>
    <div class="form-group">
        <label>邮箱</label>
        <input type="email" class="form-control" name="Email" value="test@example.com" />
    </div>
    <!-- 操作按钮 -->
    <button type="button" id="editBtn" class="btn btn-primary">编辑</button>
    <button type="button" id="acceptBtn" class="btn btn-success">Accept</button>
</form>

JavaScript逻辑

// 监听Accept按钮点击事件
document.getElementById('acceptBtn').addEventListener('click', function() {
    // 禁用表单内所有可编辑元素(输入框、下拉框、文本域等)
    const formElements = document.getElementById('editForm').elements;
    for (let elem of formElements) {
        if (['INPUT', 'SELECT', 'TEXTAREA'].includes(elem.tagName)) {
            elem.disabled = true;
        }
    }
    // 隐藏编辑按钮和Accept按钮
    document.getElementById('editBtn').style.display = 'none';
    document.getElementById('acceptBtn').style.display = 'none';
});

二、前后端结合的持久化实现(防止页面刷新后恢复)

如果需要状态持久化(比如用户刷新页面后依然保持禁用状态),可以通过后端记录状态,再在视图中根据状态渲染页面。

1. 定义ViewModel

public class UserEditViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    // 标记是否已点击Accept
    public bool IsAccepted { get; set; }
}

2. 后端Action(示例)

public IActionResult Edit(int id)
{
    // 从数据库获取用户数据,组装ViewModel
    var user = _dbContext.Users.Find(id);
    var viewModel = new UserEditViewModel
    {
        Id = user.Id,
        Name = user.Name,
        Email = user.Email,
        IsAccepted = user.IsAccepted
    };
    return View(viewModel);
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Accept(int id)
{
    var user = _dbContext.Users.Find(id);
    if (user == null) return BadRequest();
    
    // 更新数据库中的状态
    user.IsAccepted = true;
    _dbContext.SaveChanges();
    
    return Ok();
}

3. 视图代码(.cshtml)

@model UserEditViewModel

<form id="editForm">
    <input type="hidden" name="Id" value="@Model.Id" />
    <div class="form-group">
        <label>姓名</label>
        <input type="text" class="form-control" name="Name" value="@Model.Name" disabled="@Model.IsAccepted" />
    </div>
    <div class="form-group">
        <label>邮箱</label>
        <input type="email" class="form-control" name="Email" value="@Model.Email" disabled="@Model.IsAccepted" />
    </div>
    <!-- 仅当未点击Accept时显示按钮 -->
    @if (!Model.IsAccepted)
    {
        <button type="button" id="editBtn" class="btn btn-primary">编辑</button>
        <button type="button" id="acceptBtn" class="btn btn-success">Accept</button>
    }
</form>

@* 引入防伪令牌,用于AJAX提交 *@
@Html.AntiForgeryToken()

<script>
    document.getElementById('acceptBtn')?.addEventListener('click', function() {
        const userId = @Model.Id;
        // AJAX提交到后端更新状态
        fetch('/Home/Accept', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
            },
            body: JSON.stringify({ id: userId })
        }).then(response => {
            if (response.ok) {
                // 禁用表单元素并隐藏按钮
                const formElements = document.getElementById('editForm').elements;
                for (let elem of formElements) {
                    if (['INPUT', 'SELECT', 'TEXTAREA'].includes(elem.tagName)) {
                        elem.disabled = true;
                    }
                }
                document.getElementById('editBtn').style.display = 'none';
                document.getElementById('acceptBtn').style.display = 'none';
            }
        });
    });
</script>

内容的提问来源于stack exchange,提问作者Renad Abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:53:36