使用ViewBag vs直接引用多个视图的静态属性

时间:2014-05-08 20:44:54

标签: c# asp.net-mvc properties viewbag

我正在尝试集中一些相当静态的信息,例如用户名或徽标图像URL。我最初清理的代码会在需要它的每个控制器操作中查看此信息,并将其设置在强类型模型中。这导致在整个应用程序中重复使用相同(有时略有不同,取决于作者)代码的大量块。

我已经创建了一个构建此信息的静态属性,例如。

public static class SampleInfo
{
    public static string LogoUrl
    {
        get {
                string logoUrl = "would-do-something-to-store/look-up-image-here";
                return logoUrl;
            }
    }
}

现在我可以引用SampleInfo.LogoUrl并获取URL而不是每次单独查找它。但目前,该字段仍然传递给模型中的视图,因此我仍然必须每次都键入Model.LogoUrl = SampleInfo.LogoUrl

一种想法是用<img src="@Model.Logo" />替换视图中的<img src="@ViewBag.Logo" />,然后在所有控制器正在使用的基本控制器中设置ViewBag.Logo = SampleInfo.LogoUrl;。似乎大多数人都不喜欢使用ViewBag,但这似乎是一个非常好的选择,因为它只设置在一个地方,如果视图引用@ViewBag.Logo,它将能够自动从基地拉出它控制器没有任何额外的编码特定视图的所有数据仍将通过强类型视图传递,只是徽标将从模型中删除并放置在ViewBag中。

在同样的想法中,我可以将图像更改为<img src="@SampleInfo.LogoUrl" />并直接引用静态属性,完全跳过ViewBag。

跳过ViewBag并直接引用静态属性是一个很好的选择还是糟糕/糟糕的编码实践?

第三个想法是将代码添加到基类或动作过滤器,该过滤器将在当前模型中查找特定字段(例如Logo)并设置它(如果存在)。但是,我不确定这是否能够以动态的方式轻松完成?

1 个答案:

答案 0 :(得分:0)

我建议使用格式<img src="@SampleInfo.LogoUrl" />

您的观点已经与您的网站装配相关联,因此我没有看到在您的观看中直接引用此变量的问题。