2009-05-05 4 views
0

Ich benutze .NET 3.5, MVC.ASP.NET - Alias-Dropdownliste Namen auf Back-End

Ich möchte eine Reihe von String-Aliase verwenden, um Datenbankwerte darzustellen. Wenn ein Benutzer eine Option aus einem Dropdown auswählt, setzt er den Wert tatsächlich auf 0, 1, 2 usw. in der Tabelle anstatt auf den Text, der in der Dropdown-Liste selbst angezeigt wird.

z.B. Ich tue:

IdName[] Thing = new[] { 
new IdName { Id = 0, Name = "No Selection" }, 
new IdName { Id = 1, Name = "Thing A9" }, 
new IdName { Id = 2, Name = "Thing C12" }, 
new IdName { Id = 3, Name = "Thing F4" } 
}; 

MyDropDownList = new SelectList(Things, "Id", "Name",0); 

und in der Ansicht:

<%= Html.DropDownList("MyDropDownList")%> 

Nun, dies funktioniert gut. Was ich nicht zur Arbeit bringen kann, ist, den Wert des Feldes in einer "Details" -Ansicht anzuzeigen und "Thing C12" als Text anstelle von "2" zu zeigen.

Ist dies auch der beste Weg? Ich möchte nicht die tatsächliche Zeichenfolge in der Datenbank verwenden, wenn ich den Text eines Eintrags ändere (z. B. den Namen von "Thing F4" in "Thing F5" ändern). Ich bin völlig offen für einige andere Ideen.

Danke!

+0

Sie sagten: "Thing C12" als Text anstelle von "2" wo zeigt? –

+0

Was ich meine ist, wenn ein Benutzer "Thing C12" aus der Dropdown-Liste wählt, speichert es tatsächlich den Wert in der Datenbank als 2 (wegen der Art, wie ich SelectList()) – user101306

+0

ok Ich bekomme den Punkt –

Antwort

1

Sie möchten also, dass Ihre Aktionsmethode (die die Benutzerauswahl speichert) den Wert speichert und nicht den Alias, der im Dropdown-Menü angezeigt wird.

Ich denke, Sie haben zwei Möglichkeiten hier.

1- Auf der Serverseite, indem Sie den Wert (die ID) von Ihrer Datenquelle erhalten, zB: das Array Things [] in Ihrem Beispiel.

public ActionResult StoreValueFromDropDown(string MyDropDownList) { 
     var id = Things.Single(thing => thing.Name == MyDropDownList).Id; 
     // here goes the code to sotre the id 
} 

2- auf der Client-Seite, indem ein verstecktes Feld hinzugefügt wird, das den Wert des Dropdowns speichert. hier ein Beispiel mit jQuery (ich habe es nicht getestet):

<input type="hidden" id="ThingId" /> 

,

$('#MyDropDownList').change(function(e){ 
    $('#ThingId').value($('#MyDropDownList option:selected').attr('value')); 
}); 

dann müssen Sie Ihre Aktionsmethode ändern, den Wert dieses versteckten Feldes zu akzeptieren

public ActionResult StoreValueFromDropDown(int ThingId) { 

     // here goes the code to sotre the id 
} 
+0

Ich speichere der Wert in der Datenbank ohne Problem - es wurde der Wert abgerufen und in den Text, der das Problem war, zurückübersetzt. Ich habe es geschafft, mein Problem zu lösen, indem ich einen benutzerdefinierten View-Controller erstellte und eine Methode hinzufügte, um eine Suche in der 'Thing'-Liste mit dem Wert im Datenbank-Datensatz durchzuführen. Jetzt ist mein Problem, dass ich viele feldspezifische Methoden wie diese (zusammen mit einer Reihe von "Ding" -Listen) erstellen muss und ich stelle mir vor, es gibt einen besseren Weg, dies zu tun sind weniger modellspezifisch. Trotzdem, vielen Dank für Ihre Hilfe. – user101306

+0

Ich denke, dass dieses Problem allgemeiner sein kann. Ich habe versucht zu vereinfachen und habe keine besseren Ergebnisse. Ich habe eine andere Frage angefangen, um das herauszufinden. – user101306