c# – MVC – 将其他信息传递给视图
我正在使用Asp.Net MVC框架开发一个网站.我们需要在多个页面中添加一般用户信息,方式与堆栈溢出顶部的信誉栏类似.
我认为重要的是,为了将这些额外信息添加到视图中,不应该为创建控制器方法添加任何开销.这排除了在ViewData对象中传递此信息或修改ViewModel以接受信誉字段的选项,因为它会导致每个控制器看起来像这样: public ActionResult Index() { ViewData["reputationScore"] = GetUsersReputation(userId); // main controller logic here } 如果在网站的90%页面上使用它,那么如果我们还想显示用户徽章计数,则可能非常耗时. 我能想到4个解决方案 使用母版页 缺点: >这似乎正在远离MVC所代表的一切. 扩展HtmlHelper以添加GetUsersReputation方法 重写System.Web.Mvc.ViewPage <% DataAccess.GetUsersReputation() %> 创建基础通用视图模型 public ActionResult Index() { MyViewModel viewCoreInfo = model.GetData(); return View(new BaseViewModel<MyViewModel>(viewCoreInfo)); } BaseViewModel可以公开您需要的所有属性,以获取网页上所需的额外信息.例如UsersReputation(它可以在构造函数中查询数据库,也可以在访问属性时加载数据).我认为这可以更好地保持MVC隐喻,但有点麻烦. >有其他人提出了更好的解决方案 解决方法
既然你提到了转移到剃刀视图引擎的可能性,我认为ScottGu的
THIS博客文章可能会引起人们的兴趣.
他讨论了使用剃刀使用“部分”,这将使你在你的布局(“母版页”)上创建一个可以加载内容的部分.以这种方式创建SO样式信息栏将是简洁的. 编辑: 至于根据下面的评论渲染部分视图……新的mvc music store tutorial有一些例子. 在这种情况下,他们使用Html.RenderAction. Html.RenderPartial是另一种选择. 您的控制器将返回部分视图: return PartialView(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |