我有一个问题,我确信已经得到了解答。任何帮助我指向正确方向的人都将不胜感激。
我有一个标准的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"东西。 (我自学)
答案 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指出我正确的方向。