MVC - 处理公共密钥值

时间:2017-01-28 00:44:51

标签: c# asp.net-mvc asp.net-mvc-4

我有一个问题,我确信已经得到了解答。任何帮助我指向正确方向的人都将不胜感激。

我有一个标准的ASP MVC网站。与任何站点一样,我拥有应用程序各个方面的常用关键值集合。

Hair Color
10 = Green
20 = Brown
...

Status
10 = Active
20 = Paused
99 = Inactive
...

SubscriptionType
10 = 1 Week
20 = 1 Month
30 = 3 Month
...

Approval
0 = Pending Approval
10 = Approved
20 = Approved with Conditions
99 = Rejected

etc..etc..etc...

通常,我有一堆与各种类型相关联的数据库表,但我发现这个方法的所有整体管理都很繁琐(创建,添加值,SQL调用)

我的问题:

在MVC代码本身中是否有一种简单直接的方法来定义和访问这些键值。我知道我可以使用各种方法(列表,字典,哈希表,枚举等)但我正在寻找一些我可以通过各种控制器和视图轻松访问的东西(在一些Common Helper类中?)。我希望能够从键或反向获取值,并从值中获取键。

我知道有可能有1000种方法可以给这只猫上皮,但如果有人能指出我这么简单直接的方法,我会感兴趣。这是否可以(或应该)在Model层中完成?助手" CommonValues"类?任何建议都会受到欢迎。

道歉,如果这是"编程101"东西。 (我自学)

2 个答案:

答案 0 :(得分:0)

对于整数

您可以使用enum,如下所示:

addCameraToView

您当然可以将您的枚举定义为CommonValues类的成员(如果有的话)。或者您可以在命名空间内和任何类之外定义它们,这将使它们全局可用。

对于字符串(如果您更喜欢这种方法,则为整数)

您可以将常量定义为类的成员。常量作为静态字段公开,因此可以在任何地方访问它们。

enum SubscriptionType
{
    OneWeek = 10,
    OneMonth = 20,
    ThreeMonths = 30
}

注意凌乱的“ColorXXX”模式。对我来说似乎有点90多岁。如果你想限制命名空间以便你的intellisense工作更有用,你可以使用嵌套类。

public class CommonValues
{
    public const string ColorRed = "RED";
    public const string ColorBlue = "BLUE";
    public const string WorkflowStateStopped = "STOPPED";
    public const string WorkflowStateRunning = "RUNNING";
}

//Main program
var a = CommonValues.ColorRed;
var b = CommonValues.WorkflowStateRunning;

<强>显示

当谈到显示其中一个代码的含义时,你的显示元素自然应该来自资源,这将自动适应当前的文化(毕竟,有一天你会成为一个国际巨头)。您可以使用以下名称组织资源:

public class CommonValues
{
    public class Colors
    {
        public const string Red = "RED";
        public const string Blue = "BLUE";
    }
    public class WorkflowStates
    {
        public const string Running = "RUNNING";
        public const string Stopped = "STOPPED";
    }
}

//Main program
var b = CommonValues.Colors.Red;
var c = CommonValues.WorkflowStates.Running;

答案 1 :(得分:0)

我想详细介绍一下我所做的一些细节,以防其他人下线。使用John Wu的上述答案(谢谢!!),这就是我的所作所为。

创建枚举。您需要将它放在可以在视图中引用的某个类中。我在EnumHelper命名空间中调用了我的EnumValues。

namespace MyProject.EnumHelper
{
    public static class EnumValues
    {

     public enum ProjectStatus
     {
      Active = 10,
      Paused = 20,
      Inactive = 99
     }
 ...

所以我的视图的开头看起来像

@using MyProject.EnumHelper;
@model MyProject.Models.ProjectViewModel;
...

现在,如果我有整数值(比如来自DB调用)并且我想要解码的字符串(例如&#34; Active&#34;),我在视图中执行了此操作。

 var projectstatus = (EnumValues.ProjectStatus)Model.project_status;

如果我需要获取枚举整数值(例如在下拉列表中),我在视图中执行了此操作。

 var projectstatusid = (int)EnumValues.ProjectStatus.Active;

再次感谢John Wu指出我正确的方向。