如果用户点击链接,他们会将将带走。它们可能会被发送回同一页面,但页面将会卸载,再次从服务器请求,然后在浏览器中重新呈现。如果您不希望发生这种情况,您不会首先向用户提供链接。换句话说,有条件地渲染链接或不基于用户的角色或其他。
@if (userCanEdit)
{
@Html.ActionLink(...)
}
哪里userCanEdit
是任何你需要的逻辑来作出这样的决定。
如果用户无法确定您所做的任何检查,那么他们不会获得链接。简单。
但是,由于世界上有恶意的人,所以不能完全放在那里。用户有可能找出编辑某些内容并手动进入的链接。因此,为防止您在行动检查的编辑权限(比如您已经在代码样本中有),但如果用户是不允许的,那么你只返回被禁止的状态代码:
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
或
return new HttpStatusCodeResult(403);
它们都做同样的事情。
UPDATE
基于以上的评论,看来用户通常允许编辑,但不能在一个特定的实例,因为另一个用户编辑。 403 Forbidden在这种情况下并不合适,所以你真正拥有的只是一个简单的重定向回到他们所在的页面,或许用一条消息来解释他们为什么回到那里。
TempData["EditErrorMessage"] = "Sorry another user is editing that right now.";
return RedirectToAction("Index");
为什么他们点击的按钮可能无法编辑? – Shoe
伟大的问题@Shoe。这是为了支持没有某种主动刷新的记录锁定。用户将显示他们正在尝试编辑的内容目前被另一个用户锁定,但是如果由于链接已被渲染而导致状态已更改(即已解锁),我们希望在点击链接时将其带到编辑屏幕。 – Chris
我认为一个更好的方法是使用Ajax,如果成功,它会从JavaScript重定向,否则什么也不做。这样,如果出现故障,页面状态的所有信息都保持不变 – Shoe