Как отправить отключенный ввод в ASP.NET MVC?
Как отправить отключенный ввод в ASP.NET MVC?
Ответы:
Разве вы не можете сделать поле readonly="readonly"
вместо disabled="disabled"
? Значение поля только для чтения будет отправлено на сервер, но пользователь не сможет его редактировать. Однако SELECT
тег - исключение.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
как сделать его серым, чтобы он выглядел так, будто он не редактируется. А еще лучше мы можем использовать что-то похожее на LabelFor, я попробовал LabelFor, но он получает только DisplayName ....
type="checkbox"
входных данных,
Спасибо всем:
Как я решил это:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Примечание:
Я получил эту информацию по ответу, но меня отредактировали.
textBox.Attributes.Add("readonly", "readonly");
и объяснение в ссылке
$("#textBoxId").css("color", "#c0c0c0")
.
@ppumkin упомянул об этом в своем комментарии к этому ответу, но я хотел выделить это, поскольку мне не удалось найти другие ресурсы по отправке данных от инвалида <select>
. Я также считаю, что это имеет отношение к вопросу, поскольку выборки не являются, <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
.
Обычно, если у меня есть поле «только для чтения», но его нужно отправить обратно на сервер, я отключу отображение (или просто текст), но затем добавлю скрытое поле с тем же именем. Вам все равно нужно убедиться, что поле фактически не изменено на стороне сервера - просто не обновляйте его из модели в своем действии - но состояние модели все равно будет точным, если есть ошибки.
Вы также можете использовать такой код перед отправкой формы:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
Браузеры по дизайну не поддерживают это.
Либо сделайте их, readonly
которые позволяют отправлять значения на сервер, либо, если вы имеете дело с элементами управления, которые все еще можно использовать с readonly
атрибутом, таким как Select, добавьте стиль 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>
когда мы имеем дело с отключенными, но отмеченными флажками и хотим опубликовать значение, нам нужно убедиться, что наше скрытое поле отображается перед скрытым полем @ Html.CheckBoxFor.
Ниже приводится ссылка, по которой я нашел ответ. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
расширение 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
});
Это поможет в отправке значений модели в ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
Я обычно использую этот способ для CheckBox или CheckBoxFor, потому что отключение его приводит к потере значения. Только чтение не работает с флажком.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Просто поместите этот скрипт в скрипты @section на своей странице. это позволит вводить данные при отправке страницы, и вы должны перенаправить пользователя на другую страницу после отправки.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
if ($('form').valid()) {
$("input").removeAttr("disabled");
}
});
</script>