2017-01-28 9 views
0

Ich habe eine Frage, die mir sicher bereits beantwortet wurde. Jede Hilfe, die mich in die richtige Richtung weist, würde geschätzt werden.MVC - Umgang mit gemeinsamen Schlüsselwerten

Ich habe eine Standard-ASP-MVC-Site. Wie bei jeder Site habe ich die übliche Sammlung von Schlüsselwerten für verschiedene Aspekte der Anwendung.

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... 

Normalerweise Ich habe eine Reihe von DB-Tabellen mit den verschiedenen Typen zugeordnet, aber ich finde alle die gesamte Verwaltung dieser Methode langwierig (Erstellen, Hinzufügen Werte, SQL-Aufrufe)

Meine Frage:

Gibt es eine einfache und direkte Möglichkeit, diese Schlüsselwerte innerhalb des MVC-Codes selbst zu definieren und darauf zuzugreifen. Ich weiß, dass ich verschiedene Mittel (Listen, Wörterbuch, Hashtables, Enums, etc ..) verwenden kann, aber ich suche nach etwas, auf das ich leicht über verschiedene Controller AND Views zugreifen kann (in einigen Common Helper-Klassen?). Ich möchte in der Lage sein, den Wert von der Taste oder umgekehrt zu erhalten und den Schlüssel von dem Wert zu erhalten.

Ich weiß, es gibt wahrscheinlich 1000 Möglichkeiten, diese Katze zu häuten, aber ich würde mich interessieren, wenn mir jemand auf eine einfache und direkte Art und Weise zeigen könnte, es zu tun. Ist das etwas, was in der Model-Ebene gemacht werden könnte (oder sollte)? Ein Helfer "CommonValues" -Klasse? Irgendwelche Vorschläge wären willkommen.

Entschuldigung, wenn dies "Programmierung 101" Zeug ist. (Ich bin Autodidakt)

+0

Wenn sich die Werte nicht ändern, was ist falsch an einer 'enum'? Und all die Optionen, die Sie aufgelistet haben, können mit _Controllers AND Views_ verwendet werden, so dass nicht klar ist, was Ihr Problem ist. –

Antwort

0

Für ganze Zahlen

Sie ein enum verwenden können, wie folgt aus:

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

Sie könnten sicherlich Ihre Aufzählungen als Mitglieder einer CommonValues ​​Klasse definieren, wenn Sie habe eine. Oder Sie könnten sie innerhalb des Namensraums und außerhalb jeder Klasse definieren, wodurch sie global verfügbar wären.

Für Strings (oder ganze Zahlen, wenn Sie diese Methode besser gefällt)

Sie können Konstanten als Mitglied einer Klasse definieren. Konstanten werden als statische Felder angezeigt, sodass sie überall zugänglich sind.

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; 

Beachten Sie das unordentliche "ColorXXX" -Muster. Scheint ein wenig 90er zu mir. Wenn Sie Namespaces einschränken möchten, damit Ihre Intellisense ein wenig sinnvoller funktioniert, können Sie eine geschachtelte Klasse verwenden.

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; 

Anzeige

Wenn es darum geht, die Bedeutung eines dieser Codes angezeigt werden, natürlich Ihre Anzeigeelemente von Ressourcen kommen sollte, die sich automatisch an die aktuelle Kultur anpassen (immerhin eines Tages Sie werden ein internationaler Riese sein). Sie können Ihre Ressourcen mit Namen wie folgt organisieren:

+0

danke John. Ich verwende meistens Ganzzahlen als Schlüssel und eine Zeichenfolge als Wert. Die Schlüssel werden in verschiedenen Tabellen verwendet (z. B. habe ich eine 'Projekt' Tabelle hat eine Spalte mit dem Namen 'Status', der Wert von 10 würde 'Aktiv' anzeigen). In der Ansicht für Projekt möchte ich schnell den Status von 10 konvertieren und den Wert von "Active" auf der Seite zeigen, ohne einen Db-Join zu einer Dekodier-Tabelle zu machen –

+0

Ich habe einen Abschnitt hinzugefügt, wie diese Werte ohne a angezeigt werden Ausflug in die DB. –

+0

John. Das ist ziemlich genau das, wonach ich suche. Was ist, wenn ich nur den Wert (z. B. "10") erhalten habe. Wie verwende ich das, um zu "One Week" zurückzukehren? Ich bin nicht vertraut mit dem ResourceManager –

0

Ich wollte einige Details von dem, was ich getan habe, wenn dies hilft anderen auf der ganzen Linie. Mit John Wus Antwort von oben (Danke !!), hier ist, was ich getan habe.

Erstellen Sie die Enum.Sie müssen dies in eine Klasse einfügen, auf die Sie in der Ansicht verweisen können. Ich habe meine EnumValues ​​im EnumHelper-Namensraum aufgerufen.

namespace MyProject.EnumHelper 
{ 
    public static class EnumValues 
    { 

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

So der Anfang meiner Ansicht sieht aus wie

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

Nun, wenn ich den Integer-Wert (etwa aus dem DB-Aufruf) und ich die decodierte Zeichenfolge will (ex. „Aktiv“) Ich habe das in der Ansicht getan.

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

Wenn ich den Enum ganzzahligen Wert erhalten müssen (ex. In einem Drop-Down), ich habe dies in der Ansicht.

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

Nochmals vielen Dank an John Wu, dass er mich in die richtige Richtung weist.

Verwandte Themen