Получить значение отключенного выпадающего списка в asp.net mvc
У меня есть приложение ASP.NET MVC. У меня есть несколько раскрывающихся списков на моей странице (HTML SELECT), я должен их отключить, так как пользователь продолжает выбирать их по одному. Когда пользователь отправляет его обратно в контроллер, я получаю null в качестве параметра функции (действия). Я искал и обнаружил, что HTML не отправляет значение отключенных полей в данные формы. Замена отключенного атрибута с помощью readonly не будет работать, поскольку это приведет к выпадающему меню.
Я генерирую выпадающие списки динамически, используя javascript, когда пользователь продолжает работу. Таким образом, нет ни одного выпадающего списка, но столько, сколько захочет пользователь.
Может кто-нибудь скажет мне, как мне получить значения?
Ответы
Ответ 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')