禁止在ASP.NET MVC中同时访问页面

时间:2016-10-11 06:53:42

标签: asp.net-mvc concurrency access

我们有一个使用ASP.NET MVC构建的多用户管理面板的Web应用程序。由于多个用户同时访问同一页面,因此只有最后编辑和保存的用户数据才会更新到数据库。这会给其他用户带来问题。

  1. 是否有任何选项可以随时禁止用户同时访问同一页面?如果用户已经在页面上工作,系统应该提醒正在尝试访问“其他人在此页面上工作的同一页面的其他用户。请在一段时间后尝试”。
  2. MVC框架本身或.NET身份验证是否提供此问题的工具?
  3. 否则,任何合适的逻辑解决方案都可以。
  4. 提前致谢...

1 个答案:

答案 0 :(得分:0)

创建类似sys_forms的表这个表有像控制器,动作和视图以及isActive

这样的列

并在需要检查页面是否可用时添加操作过滤器

[PageAvailableFilter]
 public class HomeController : Controller
 {
      public ActionResult Index()
      {
           return View();
      }
 }

并创建PageAvailableFilter类继承自ActionFilterAttribute并重写OnActionExecuting方法,因为此方法在控制器中的操作之前调用

public class PageAvailableFilterFilter : ActionFilterAttribute

 {
      public override void OnActionExecuting(ActionExecutingContext filterContext)
      {
           var controllerName = filterContext.routeData.Values["controller"];
           var actionName = filterContext.routeData.Values["action"];
           //here and you logic and query
           if (some_conditions == true)
           {
            filterContext.Result = new RedirectResult("~/MyPage");
            return;
           }
      }
  }

并检查此控制器和操作是否可用,您可以在此类中使用viewbag和viewdata

了解更多信息,了解有关动作过滤器的更多信息