2015-11-05 108 views
0

如果我有内部控制器的多条ViewBag线使用ViewBag作为对象

ViewBag.ShowElement1 = myObj.IsAllowed; 
ViewBag.PageLabel = someotherObj.PersonName; 
.... 

我内部视图当然使用的访问某些值不知有任何更好的解决方案来包装成1个逻辑块这个所以我可以在里面查看访问诸如

ViewBag.MyRestricts.ShowElement1 
ViewBag.MyRestricts.ShowElement8 
+2

创建一个类,并使用一个类?我觉得你可能会滥用ViewBag。 – DavidG

+0

这不是一个好习惯吗?只是询问 – user1765862

+0

它看起来像你试图传递一堆数据到你的视图,你不能只使用视图模型? – DavidG

回答

3

最佳的解决方案将是,如果你将创建一个视图模型添加任何东西,你查看需要it.And然后创建使用ViewModel模型的强类型视图。

一个视图 - 一个视图模型 .Anything您查看需要它必须在视图模型

有一些规则。

规则#1 - 所有视图都是强类型
规则#2 - 每个视图模型类型,定义只有一个强类型 查看
规则#3 - 视图决定了视图模型的设计。只有需要
才能呈现一个View,并传入ViewModel。
规则#4 - 视图模型只包含有关查看

enter image description here

这是一个很好的post.I觉得会interestring的数据和行为,你 https://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/

0

为什么不你使用ViewModel呢?您可以定义一个类,如ShowElement1和pageLabel与属性,然后在顶部加入这一行访问该视图:

@model TheTypeOfYourClass 

然后,你可以用@Model.PageLabel访问属性。

0

正如之前所说,这里最好的解决方案是使用ViewModel,因为使用沉重的视图包被认为是不好的做法。你可以阅读有关这个​​here,我完全同意这个职位同意:

这里是视图模型将如何看起来像:

namespace MyProject.Models 
{ 
    public class MyViewModel 
    { 
     public bool ShowElement1 { get; set; } 
     public string PageLabel { get; set; } 
    } 
} 

这里是控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      ShowElement1 = myObj.IsAllowed, 
      PageLabel = someotherObj.PersonName 
     }; 

     return View(model); 
    } 
} 

而且你的看法将是什么像这样:

@model MyProject.Models.MyViewModel 

<p>ShowElement1 value: @Model.ShowElement1</p> 
<p>PageLabel value: @Model.PageLabel </p> 
+0

我怀疑这将是一个更好的解决方案,因为最有可能的模型已经被使用并且视图包含视图相关数据。 –

-1

您可以使用anonymouse对象

ViewBag.MyRestricts = new { ShowElement1 = true, ShowElement2 = false, }; 

,或者你可以创建为

public class Restricts 
{ 
    public bool ShowElement1 { get; set; } 
    public bool ShowElement8 { get; set; } 
} 
ViewBag.MyRestricts = new Restricts { ShowElement1 = true, ShowElement2 = false, }; 

,并在您的视图

var restricts = (Restricts)ViewBag.MyRestricts; 
if (restricts.ShowElement1) 
    ....