Як подати відключений вхід у 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
таким атрибутом, як "Вибір", додайте стиль 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.CheckBoxДля прихованого поля.
далі посилання, звідки я знайшов відповідь. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
розширення Tasos '(": вимкнено", $ (' # xxxForm ')). RemoveAttr ("вимкнено"); Ви можете використовувати:
$("#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, оскільки його відключення спричиняє втрату значення. Readonly також не працює на прапорець.
@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>