asp.net-mvc – 如何根据用户过滤MVC 4中的结果
|
我有自定义身份验证,当用户登录时,我在Session / Cache上保留必要的信息… 所以,我有一些DropDowns的视图必须显示按用户ID过滤的数据… 1 – 直接在控制器上? ... Model.MyList = repository.GetAll().Where(x => x.User.Id == userId); return View(Model); 2 – 创建动作过滤器(如何在不查询来自DB的不必要数据的情况下执行此操作) 3 – 其他方式? 1的问题是我有几个具有相同下拉列表的视图,因此我将不得不重复相同的代码. 解决方法方法 – 1功能 private void userInfo(ResultExecutingContext filtercontext)
{
if (filtercontext.Controller.TempData[userId.ToString()] == null)
filtercontext.Controller.ViewBag.userId =
filtercontext.Controller.TempData[userId.ToString()] =
repository.GetAll().Where(x => x.Id == userId);
else //This will load the data from TempData. So,no need to
//hit DataBase.
filtercontext.Controller.ViewBag.userId =
filtercontext.Controller.TempData[userId.ToString()];
TempData.Keep(); // This will save your Database hit.
}
过滤方法 public class MyActionFilter : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filtercontext)
{
//Call the Action Method before executing the View and after
//executing the Action.
userInfo(filtercontext);
base.OnResultExecuting(filtercontext);
}
}
控制器动作方法 [MyActionFilter]
//Whenever Action Method will execute. We will check TempData contains
//Data or not.
public ActionResult Index()
{
return View();
}
关于TempData和TempData.Keep()的要点 > TempData中的项目只有在读取后才会被标记为删除. 您也可以使用会话变量,唯一的主要问题是会话变量与TempData相比非常繁重.最后,您还可以跨控制器/区域保持数据. TempData也适用于新的Tabs / Windows,就像Session变量一样. 方法 – 2 您可以在某个变量中缓存数据,并可以再次重复使用.以与TempData相同的方式. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 2中的asp.net-mvc-2 – LazyList vs System.La
- asp.net-mvc – ASP.Net MVC输出缓存:指令或配置设置配置文
- asp.net-mvc-3 – 在Razor/MVC3中显示数据库映像(bytes [])
- asp.net-mvc – 如何在启动应用程序之前在system.web.mvc中
- 在asp.net中使用Eval()是什么
- 实体框架 – 为什么没有[Authorize(Roles =“Admin”)]在具
- asp.net – 检查IE浏览器 – .NET
- asp.net-mvc – MVC3 EF4 POCO存储库/ UnitOfWork连接错误
- asp.net – Visual Studio 2008使用CodeBehind失去了对于AS
- asp.net – 在IHTTPHandler中以编程方式创建System.Web.UI.
