Bagaimana cara mengirimkan input yang dinonaktifkan di ASP.NET MVC?
Bagaimana cara mengirimkan input yang dinonaktifkan di ASP.NET MVC?
Jawaban:
Tidak bisakah Anda membuat lapangan, readonly="readonly"bukan disabled="disabled"? Nilai bidang hanya-baca akan dikirimkan ke server sementara masih tidak dapat diedit oleh pengguna. Sebuah SELECTtag adalah pengecualian.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>bagaimana saya bisa membuatnya menjadi abu-abu sehingga secara visual sepertinya tidak dapat diedit. Lebih baik lagi kita dapat menggunakan sesuatu yang mirip dengan LabelFor, saya mencoba LabelFor tetapi hanya mendapatkan DisplayName ....
type="checkbox"input
Terima kasih untuk semuanya:
Cara saya menyelesaikan ini:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
catatan:
Saya mendapat informasi ini di jawabannya tetapi saya telah diedit.
textBox.Attributes.Add("readonly", "readonly");dan penjelasannya ada di tautan
$("#textBoxId").css("color", "#c0c0c0").
@ppumkin menyebutkan ini pada komentarnya tentang jawaban ini, tetapi saya ingin menyorotinya karena saya tidak dapat menemukan sumber daya lain untuk mengirimkan data dari penyandang cacat <select>. Saya juga percaya ini relevan dengan pertanyaan karena yang dipilih bukan <input>s tetapi mereka adalah "masukan".
Cukup sertakan bidang Tersembunyi untuk pilih yang dinonaktifkan dan semuanya diurutkan.
Contoh:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Perhatian: ini akan menempatkan dua tag pada halaman dengan ID yang sama, yang sebenarnya bukan HTML yang valid dan dapat menyebabkan pusing dengan javascript. Bagi saya, saya memiliki javascript untuk mengatur nilai dropdown dengan html-nya id, dan jika Anda meletakkan bidang tersembunyi terlebih dahulu, javascript akan menemukannya, bukan select.
Biasanya, jika saya memiliki bidang yang "hanya-baca" tetapi perlu dikirim kembali ke server, saya akan membuat tampilan dinonaktifkan (atau hanya teks), tetapi kemudian menambahkan bidang tersembunyi dengan nama yang sama. Anda masih perlu memastikan bahwa bidang tersebut tidak benar-benar diubah di sisi server - jangan perbarui dari model dalam tindakan Anda - tetapi status model akan tetap akurat jika ada kesalahan.
Anda juga dapat menggunakan kode seperti ini sebelum formulir dikirimkan:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm?
Dengan desain browser tidak mendukung itu.
Baik membuatnya readonlyyang memungkinkan pengiriman nilai ke server atau jika Anda berurusan dengan kontrol yang masih dapat digunakan dengan readonlyatribut seperti Pilih, tambahkan gaya csspointer-events: none; untuk menjadikannya non-interaktif
Agak hack, tapi berhasil! Ini juga berfungsi ketika Anda mengirimkan formulir secara langsung dengan tombol kirim tanpa menggunakan javascript. Tidak perlu kerja ekstra!
Misalnya:
<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>
ketika kita berurusan dengan kotak centang yang dinonaktifkan tetapi dicentang dan kami ingin memposting nilainya, kami perlu memastikan bidang tersembunyi kami muncul sebelum bidang tersembunyi @ Html.CheckBoxFor.
berikut adalah tautan dari mana saya menemukan jawabannya. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
memperluas Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); kamu bisa memakai:
$("#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
});
Ini akan membantu dalam mengirimkan nilai model di ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
Saya biasanya menggunakan cara ini untuk CheckBox atau CheckBoxFor karena membuatnya dinonaktifkan menyebabkan hilangnya nilai. Hanya baca tidak berfungsi di kotak centang juga.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Letakkan saja skrip ini dalam skrip @ bagian di halaman Anda. ini akan mengaktifkan masukan saat Anda mengirimkan halaman, dan Anda harus mengarahkan pengguna ke halaman lain setelah mengirimkan.
<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>