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

ASP.NET MVC5中根据条目锁定状态禁用列表项的实现方案咨询

我来帮你搞定这个需求,直接上修改后的视图代码和关键逻辑说明:

完整修改后的<tbody>代码片段

<tbody>
    @for(var i = 0; i < Model.Songs.Count(); i++)
    {
        <tr>
            <!-- 保留你原有的其他列代码 -->
            
            <!-- 锁图标列:仅锁定状态显示图标 -->
            <td class="hidden-xs hidden-sm">
                @if (Model.Songs[i].State)
                {
                    <span class="glyphicon glyphicon-lock"></span>
                }
                <!-- 可选:如果需要显示解锁状态,可添加else分支显示glyphicon-unlock -->
                @* else { <span class="glyphicon glyphicon-unlock"></span> } *@
            </td>

            <!-- 操作下拉按钮列:锁定状态禁用指定选项 -->
            <td>
                <div class="dropdown">
                    <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
                        操作 <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu">
                        <li>
                            <a href="@Url.Action("Edit", new { id = Model.Songs[i].Id })" 
                               @(Model.Songs[i].State ? "class='disabled'" : "") 
                               @(Model.Songs[i].State ? "onclick='event.preventDefault();'" : "")>
                                编辑
                            </a>
                        </li>
                        <li>
                            <a href="@Url.Action("Delete", new { id = Model.Songs[i].Id })" 
                               @(Model.Songs[i].State ? "class='disabled'" : "") 
                               @(Model.Songs[i].State ? "onclick='event.preventDefault();'" : "")>
                                删除
                            </a>
                        </li>
                    </ul>
                </div>
            </td>
        </tr>
    }
</tbody>

关键逻辑说明

  1. 锁图标控制:
    用Razor的@if条件判断,只有当Model.Songs[i].State为true(锁定状态)时,才渲染锁图标元素,完全符合你的需求。如果需要区分锁定/解锁状态,还可以在else分支添加解锁图标。

  2. 下拉选项禁用:
    针对Bootstrap下拉菜单的链接,我们做了两层控制:

    • 样式层面:添加disabled类,让链接呈现灰色禁用的视觉效果
    • 功能层面:添加onclick='event.preventDefault();',阻止链接的默认跳转行为,确保用户点击不会触发编辑/删除操作
    • 如果你用的是<select>下拉框,直接给<option>动态添加disabled属性即可:
      <option value="edit" @(Model.Songs[i].State ? "disabled" : "")>编辑</option>
      

额外建议(重要)

前端禁用只是视觉和交互层面的限制,为了避免用户通过直接访问URL绕过禁用,建议在控制器的Edit/Delete方法里也添加校验:

public ActionResult Edit(int id)
{
    var song = db.Songs.Find(id);
    if (song.State) // 检查是否锁定
    {
        TempData["ErrorMessage"] = "该条目已锁定,无法编辑";
        return RedirectToAction("Index");
    }
    // 正常编辑逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:44:03