Как я могу получить текст выбранной опции с ASP.NET MVC? - PullRequest
0 голосов
/ 26 августа 2009

У меня есть форма в проекте ASP.NET MVC, в которой есть выпадающий список выбора, похожий на следующий:

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

На более поздней странице проекта мне нужно что-то сделать с идентификатором GUID, но сначала мне нужно запросить у пользователя подтверждение. Очевидно, что GUID для них бесполезен, и они хотели бы видеть более дружелюбное имя (то есть, «учетная запись Volvo»).

Но когда я углубляюсь в значения FormCollection, все, что я могу получить, это значение, а не текст выбранной опции. Это имеет смысл, учитывая цели разработки, но как я могу также POST поверх текстового значения?

Я могу придумать некоторые обходные пути (установка скрытого поля с помощью JavaScript, поиск по факту с помощью GUID и тот же метод, которым я заполнил это, и т. Д.), Но есть ли какой-нибудь внутриприенный способ сделать это? м отсутствует?

Ответы [ 3 ]

2 голосов
/ 26 августа 2009

Нет никакого внутреннего способа сделать это, JavaScript действительно ваш лучший вариант.

Добавьте обработчик события «onchange» в ваш SELECT, который устанавливает значение скрытого ввода для отображаемого значения выбранного OPTION.

0 голосов
/ 26 августа 2009

Я обычно обрабатываю выпадающие списки / блоки выбора в MVC со статическим свойством в классе Collection в моделях.

Пример:

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" }
        };
    }
}

Тогда я бы отображал DropDown в виде:

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

Теперь эта коллекция доступна для всего вашего приложения. Вы можете получить любое удобное для пользователя имя с помощью:

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

Вы даже можете вынести коллекцию в представление, если хотите.

Надеюсь, это поможет.

0 голосов
/ 26 августа 2009

Использование скрытых полей:

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

Контроллер:

public ActionResult SomeAction(..., IDictionary<string, string> options)
{
    string selectedValue = ...;
    string selectedText = options[selectedValue];
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...