2009-08-25 8 views
0

Ich habe ein Formular in einem ASP.NET MVC-Projekt, das eine ausgewähltes Dropdown-Liste verwandt Folgendes:Wie kann ich den Text einer ausgewählten Option mit ASP.NET MVC abrufen?

<select> 
    <option value="ee5711b9-ec86-4378-a975-ae10a4ebedbc">Volvo Account</option> 
    <option value="0dc0e9d8-2245-43de-81a9-5b94c19646fa">Saab Account</option> 
    <option value="f9a05ef6-9ca6-4eeb-9e04-79726a62b38c">Mercedes Account</option> 
    <option value="1c5c2e43-06d6-4b7d-916a-231be535a608">Audi Account</option> 
</select> 

In einer späteren Seite im Projekt Ich brauche etwas zu tun mit der GUID-Kennung, aber Zuerst muss ich den Benutzer zur Bestätigung auffordern. Offensichtlich ist die GUID für sie nutzlos und sie würden gerne den freundlicheren Namen (d. H. "Volvo Account") sehen.

Wenn ich jedoch in die FormCollection-Werte bohre, kann ich nur den Wert erhalten, nicht den Text der ausgewählten Option. Dies ist angesichts der Entwurfsziele sinnvoll, aber wie kann ich den Textwert auch POST?

Ich kann mir einige Problemumgehungen vorstellen (ein verstecktes Feld mit JavaScript einstellen, eine Suche nach der Tat mit der GUID und der gleichen Methode, mit der ich dies bevölkerte, etc.) aber gibt es irgendeine intrinisc Weg, dies zu tun, ich fehlt?

Antwort

2

Es gibt keine intrinsische Möglichkeit dies zu tun, JavaScript ist wirklich Ihre beste Option.

Fügen Sie Ihrem SELECT einen Ereignishandler "onchange" hinzu, der den Wert einer ausgeblendeten Eingabe auf den Anzeigewert der ausgewählten OPTION setzt.

+0

Was passiert, wenn sich der Wert nicht ändert? Ich stimme dem nicht zu, aber die Art und Weise wie der Client es will, der erste Wert in der Liste ist ein gültiger Wert (also können sie durchklicken, wenn sie nicht geändert werden wollen) –

+1

Sie können den Wert des versteckte Eingabe, um den Wert Ihrer SELECT-Eingabe in Ihrer Ansicht ziemlich einfach zu entsprechen und die JavaScript-WirecUp-Änderungen zu verarbeiten. Von Ihnen können Sie ein seitenfertiges Skript ausführen lassen und die versteckte Eingabe auf den ausgewählten Wert setzen, sobald die Seite geladen ist. – JMP

0

Mit versteckten Feldern:

<select> 
    <option value="ee5711b9-ec86-4378-a975-ae10a4ebedbc">Volvo Account</option> 
    <option value="0dc0e9d8-2245-43de-81a9-5b94c19646fa">Saab Account</option> 
    <option value="f9a05ef6-9ca6-4eeb-9e04-79726a62b38c">Mercedes Account</option> 
    <option value="1c5c2e43-06d6-4b7d-916a-231be535a608">Audi Account</option> 
</select> 
... 
<input type="hidden" name="Options[0].Key" value="ee5711b9-ec86-4378-a975-ae10a4ebedbc" /> 
<input type="hidden" name="Options[0].Value" value="Volvo Account" /> 
<input type="hidden" name="Options[1].Key" value="0dc0e9d8-2245-43de-81a9-5b94c19646fa" /> 
<input type="hidden" name="Options[1].Value" value="Saab Account" /> 
... 

Controller:

public ActionResult SomeAction(..., IDictionary<string, string> options) 
{ 
    string selectedValue = ...; 
    string selectedText = options[selectedValue]; 
} 
0

ich in der Regel Tropfen Downs/Select-Boxen in MVC mit einer statischen Eigenschaft innerhalb einer Collection-Klasse in Models behandeln.

Beispiel:

using System.Collections.Generic; 

namespace SomeProject.Models 
{ 
    public class Collections 
    { 
     public static Dictionary<string, string> AccountType = new Dictionary<string, string> 
     { 
      { "", "" }, 
      { "ee5711b9-ec86-4378-a975-ae10a4ebedbc", "Volvo Account" }, 
      { "0dc0e9d8-2245-43de-81a9-5b94c19646fa", "Saab Account" }, 
      { "f9a05ef6-9ca6-4eeb-9e04-79726a62b38c", "Mercedes Account" }, 
      { "1c5c2e43-06d6-4b7d-916a-231be535a608", "Audi Account" } 
     }; 
    } 
} 

Dann würde ich den Drop-Down in der Ansicht wie machen:

<%= Html.DropDownList("AccountType", new SelectList(SomeProject.Models.Collections.AccountType, "Key", "Value", Convert.ToString(ViewData["AccountType"])), "", new { tabindex = "3", @class = "dropdown" }) %> 

Nun, da Sammlung auf Ihre gesamte Anwendung zur Verfügung steht. was auch immer benutzerfreundlichen Namen können Sie greifen Sie möchten über:

SomeProject.Models.Collections.AccountType[ViewData["AccountType"]] 

Sie auch die Sammlung, um die Ansicht machen können, wenn Sie es wünschen.

Hoffe, dass hilft.

Verwandte Themen