Подтвердить что ты не робот

Получить значение отключенного выпадающего списка в asp.net mvc

У меня есть приложение ASP.NET MVC. У меня есть несколько раскрывающихся списков на моей странице (HTML SELECT), я должен их отключить, так как пользователь продолжает выбирать их по одному. Когда пользователь отправляет его обратно в контроллер, я получаю null в качестве параметра функции (действия). Я искал и обнаружил, что HTML не отправляет значение отключенных полей в данные формы. Замена отключенного атрибута с помощью readonly не будет работать, поскольку это приведет к выпадающему меню.

Я генерирую выпадающие списки динамически, используя javascript, когда пользователь продолжает работу. Таким образом, нет ни одного выпадающего списка, но столько, сколько захочет пользователь.

Может кто-нибудь скажет мне, как мне получить значения?

4b9b3361

Ответ 1

Одна из возможностей состоит в том, чтобы создать раскрывающийся список disabled="disabled" и включить скрытое поле с тем же именем и значением, которое позволит отправить это значение на сервер:

@Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" })
@Html.HiddenFor(x => x.FooId)

Если вам нужно отключить раскрывающийся список динамически с помощью javascript, просто назначьте текущее выбранное значение выпадающего списка в скрытое поле сразу после его отключения.

Ответ 2

Это поведение по умолчанию для отключенных элементов управления. Я предлагаю вам добавить скрытое поле и установить значение вашего DropDownList в этом скрытом поле и работать с этим.

Что-то вроде:

//just to create a interface for the user
@Html.DropDownList("categoryDump", (SeectList)ViewBag.Categories, new { disabled = "disabled" });
// it will be send to the post action
@Html.HiddenFor(x => x.CategoryID)

Ответ 3

Вы также можете создать свою собственную DropDownListFor перегрузку, которая принимает параметр bool disabled и делает тяжелый подъем для вас, чтобы ваш взгляд не был загроможден с помощью if disablethisfield then ....

Что-то из этих строк могло бы сделать:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, bool disabled)
{
    if (disabled)
        return MvcHtmlString.Create(htmlHelper.HiddenFor(expression).ToString() + htmlHelper.DropDownListFor(expression, selectList, new { disabled="disabled" }).ToString());
    else
        return htmlHelper.DropDownListFor(expression, selectList);
}

Есть 6 перегрузок для DropDownListFor в одиночку, так что это много monkeycoding, но оно окупится в конце imho.

Ответ 4

перед отправкой вызова $('# FooId'). removeAttr ('disabled')