Как отправить отключенный ввод в ASP.NET MVC?

Как отправить отключенный ввод в ASP.NET MVC?

Ответ 1

Спасибо всем:

Как я решил это:

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";

Примечание:

Я получил эту информацию о ответе, но я был изменен.

Ответ 2

Не можете ли вы создать поле readonly="readonly" вместо disabled="disabled"? Значение поля только для чтения будет отправлено на сервер, пока пользователь не будет редактировать его. Тег SELECT является исключением.

Ответ 3

@ppumkin упомянул об этом в своем комментарии к этому ответу, но я хотел выделить его, поскольку мне не удалось найти другие ресурсы при отправке данных с отключенного <select>, Я также считаю, что это относится к вопросу, поскольку selects не <input>, но они являются "входными".

Просто включите скрытое поле для отключенного выбора и все его отсортированные.

Пример:

@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@

Предостережение: это поместит два тега на страницу с тем же идентификатором, который не является действительно действительным HTML и может вызвать головные боли с помощью javascript. Для меня у меня есть javascript, чтобы установить значение раскрывающегося списка по его html id, и если вы сначала поместите скрытое поле, javascript найдет это вместо select.

Ответ 4

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

Ответ 5

Вы также можете использовать такой код, прежде чем форма отправит:

$(":disabled", $('#frmMain')).removeAttr("disabled");

Ответ 6

Вы можете создать шаблон редактора, например, ниже

CSS

.disabled {
    background-color:lightgray;
}

Шаблон редактора

@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })

Ответ 7

когда мы имеем дело с отключенными, но отмечены флажками, и мы хотим опубликовать это значение, нам нужно, чтобы наше скрытое поле появилось перед скрытым полем @Html.CheckBoxFor.

Ниже приведена ссылка, откуда я нашел ответ. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033

Ответ 8

По своему дизайну браузеры не поддерживают это.

Либо сделайте их readonly что позволяет отправлять значения на сервер, либо, если вы имеете дело с элементами управления, которые все еще можно использовать с атрибутом только для readonly такими как Select, добавьте pointer-events: none; стиле css pointer-events: none; сделать их неинтерактивными

Вроде хак, но работает! Это также работает, когда вы отправляете форму напрямую с помощью кнопки отправки без использования JavaScript. Никакой дополнительной работы не требуется!

Например:

<select asp-for="TypeId" 
   asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
   class="form-control form-control-sm" 
   readonly 
   style="pointer-events: none;">
</select>

Ответ 9

Я обычно использую этот способ для CheckBox или CheckBoxFor, потому что отключение приводит к потере значения. Readonly также не работает на флажок.

@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)

Ответ 10

расширение Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); ты можешь использовать:

$("#xxxForm").submit(function (e) {
    e.preventDefault();
    var form = this;
    $('#Field1')[0].disabled = false;
    $('#Field2')[0].disabled = false;
    ...
    $('#FieldN')[0].disabled = false;
    form.submit(); // submit bypassing the jQuery bound event
});

Ответ 11

$ ("# iD"). attr ("стиль", "события указателя: нет; цвет фона: rgb (220,220,220)");

Это поможет в отправке значений модели в asp.net.

Ответ 12

Просто сделайте это свойство [Обязательным] во ViewModel, связанном с этим представлением.