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>
关键逻辑说明
锁图标控制:
用Razor的@if条件判断,只有当Model.Songs[i].State为true(锁定状态)时,才渲染锁图标元素,完全符合你的需求。如果需要区分锁定/解锁状态,还可以在else分支添加解锁图标。下拉选项禁用:
针对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
相关产品推荐
相关产品推荐

