Создание выпадающего списка только для чтения, но при этом его значение

Я использую помощник Html.DropDownList в ASP.NET MVC, и я хотел бы сделать его доступным только для чтения. К сожалению, мне также нужно, чтобы он представил свою ценность в сообщении формы.

Я нашел (через аналогичный вопрос в SO), что использование нижеследующего формата приведет к выпаданию только для чтения, но не обеспечит доступ к элементу управления значение внутри контроллера.

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })

Кто-нибудь знает, как сделать выпадающий список доступным только для чтения или отключенным с помощью ASP.NET MVC, а также позволить ему отправить сообщение в виде формы?

Ответы

Ответ 1

Это предполагало поведение на стороне веб-браузера - отключенный элемент управления не будет отправлять данные на сервер при отправке формы.

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

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

Ответ 2

Вы можете включить его при отправке. Даунсайд: это выглядит странно.

$(form).submit(function() {
  $('#Types').removeAttr('disabled');
});

или скопируйте значение в скрытое поле для отправки.

$(form).submit(function() {
  $('#HiddenField').val($('#Types').val());
});

Ответ 3

  • Вместо этого сделайте это текстовым полем.
  • Добавить событие изменения с помощью JavaScript:

    $('#dropdown').change(function(e) { e.preventDefault(); });

  • У вас есть раскрывающийся список, в котором есть только 1 элемент.

  • У вас есть скрытый элемент с фактическим значением раскрывающегося списка, поэтому он отправляется, даже если выпадающее меню отключено.

Ответ 4

Просто измените таблицу стилей этого элемента.

visibility:"visible"
visibility:"hidden"

Для получения дополнительной информации см. http://support.microsoft.com/kb/199243.

Вы все равно получите обратную передачу, но вы также больше не увидите этого.

Ответ 5

Я думаю, лучшее решение - разместить его через

$.post(url,
{
   AID: val1,
   CID: val2
},
  function (data) {
    // act on model
  }
);