2017-01-28 2 views
0

У меня есть вопрос, на который я уверен, уже был дан ответ. Любая помощь, указывающая мне в правильном направлении, будет оценена по достоинству.MVC - обработка общих значений ключа

У меня есть стандартный сайт 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. Я знаю, что могу использовать различные средства (Списки, Словарь, Hashtables, Enums и т. Д.), Но я ищу что-то, что я могу легко получить через различные контроллеры AND Views (в некоторых классах Common Helper?). Я хочу иметь возможность получить значение от ключа ИЛИ наоборот и получить ключ от значения.

Я знаю, что есть, вероятно, 1000 способов кожи этой кошки, но мне было бы интересно, если кто-нибудь может указать мне на простой и понятный способ сделать это. Это что-то, что можно (или должно) сделать на уровне модели? Класс помощника «CommonValues»? Любые предложения приветствуются.

Извините, если это «Программирование 101». (Я самоучка)

+0

Если значения не меняются, что не так с 'enum'? И все перечисленные вами параметры могут использоваться с _Controllers AND Views_, поэтому неясно, какова ваша проблема. –

ответ

0

Для целых

Вы можете использовать enum, как это:

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

Вы можете, конечно, определить свои перечислений в качестве членов класса CommonValues, если вы Имеется. Или вы можете определить их в пространстве имен и вне любого класса, что сделает их доступными по всему миру.

Для строк (или целые числа, если Вам нравится этот метод лучше)

Вы можете определить константы в качестве члена класса. Константы отображаются как статические поля, поэтому они доступны в любом месте.

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; 

Обратите внимание на беспорядочный шаблон «ColorXXX». Кажется, мне немного 90-х. Если вы хотите ограничить пространства имен, чтобы ваш intellisense работал более полезно, вы можете использовать вложенный класс.

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; 

Дисплей

Когда дело доходит до отображения значения одного из этих кодов, естественно медийные элементы должны поступать из ресурсов, которые автоматически приспосабливаются к текущей культуре (в конце концов, когда-нибудь вы будете международным гигантом). Вы можете организовать свои ресурсы с такими именами:

var resources = new ResourceManager("CommonValues", myAssembly); 

//Example for use with enum 
SubscriptionType code = SubscriptionType.OneWeek; 
var display = resources.GetString("SubscriptionType." + code.ToString()); //Resource ID = "SubscriptionType.OneWeek"; 

//Example for use with string constant 
var colorCode = CommonValues.Colors.Red; 
var display = resources.GetString("Colors." + colorCode); //Resource ID = "Colors.Red"; 
+0

спасибо john. В основном я использую целые числа как ключ и строку в качестве значения. ключи будут использоваться в разных таблицах (например, у меня в таблице «проект» есть столбец с названием «статус», значение 10 которого будет указывать «активный»). В проекте «Вид для проекта» я хочу быстро преобразовать статус 10 и показать значение «Активный» на странице, не делая db-соединение в таблице декодирования –

+0

Я добавил раздел о том, как отображать эти значения без путешествие в БД. –

+0

john. это в значительной степени то, что я ищу. что, если мне просто присвоено значение (например, «10»). Как использовать это, чтобы вернуться к «Одна неделя». я не слишком хорошо знаком с ResourceManager –

0

Я хотел бы рассказать о том, что я сделал, если это поможет другим спуститься по прямой линии. Используя ответ Джона Ву сверху (спасибо!), Вот что я сделал.

Создать перечисление.Вы должны поместить это в некоторый класс, который вы можете ссылаться в представлении. Я позвонил в EnumValues ​​в пространство имен EnumHelper.

namespace MyProject.EnumHelper 
{ 
    public static class EnumValues 
    { 

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

Так начало мой взгляд выглядит

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

Теперь, если у меня есть целое значение (скажем, от вызова DB), и я хочу декодированную строку (напр., «Active») , Я сделал это в представлении.

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

Если мне нужно получить целочисленное значение перечисления (например, в выпадающем списке), я сделал это в представлении.

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

Еще раз спасибо John Wu за то, что указали мне в правильном направлении.