Devre dışı girişi ASP.NET MVC'de nasıl gönderebilirim?
Devre dışı girişi ASP.NET MVC'de nasıl gönderebilirim?
Yanıtlar:
readonly="readonly"
Bunun yerine sahayı yapamaz mısın disabled="disabled"
? Bir salt okunur alan değeri, kullanıcı tarafından düzenlenememeye devam ederken sunucuya gönderilecektir. Bir SELECT
etiket bir istisnadır.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
Düzenlenebilir değilmiş gibi görünmesi için görsel olarak nasıl grileştirebilirim? Daha da iyisi LabelFor'a benzer bir şey kullanabilir miyiz, LabelFor'u denedim ama sadece DisplayName'i alıyor ....
type="checkbox"
girişler için de çalışmıyor
Herkese teşekkürler:
Bunu çözme şeklim:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Not:
Bu bilgiyi cevapta aldım ama düzeltildim.
textBox.Attributes.Add("readonly", "readonly");
ve açıklama bağlantıda
$("#textBoxId").css("color", "#c0c0c0")
.
@ppumkin, bu yanıtla ilgili yorumunda bundan bahsetti, ancak engelli bir kişiden veri göndermek için başka kaynaklar bulamadığım için bunu vurgulamak istedim <select>
. Ayrıca seçimler <input>
s değil, "girdiler" oldukları için soruyla ilgili olduğuna inanıyorum .
Devre dışı bırakılan seçim ve tümü sıralanan için Gizli bir alan eklemeniz yeterlidir.
Misal:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Dikkat: Bu, sayfaya aynı kimliğe sahip iki etiket koyacaktır, bu gerçekten geçerli HTML değildir ve javascript ile baş ağrısına neden olabilir. Benim için, açılır listenin değerini html'sine göre ayarlamak için javascript'im var id
ve eğer gizli alanı önce koyarsanız, javascript bunu select
.
Tipik olarak, "salt okunur" olan ancak sunucuya geri gönderilmesi gereken bir alanım varsa, görüntülemeyi devre dışı bırakacağım (veya yalnızca metin), ancak ardından aynı ada sahip gizli bir alan ekleyeceğim. Yine de alanın sunucu tarafında gerçekten değiştirilmediğinden emin olmanız gerekir - sadece eyleminizdeki modelden güncellemeyin - ancak hatalar varsa model durumu yine de doğru olacaktır.
Form gönderilmeden önce de şu şekilde kod kullanabilirsiniz:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
Tasarım gereği tarayıcılar bunu desteklemiyor.
Ya bunları readonly
sunucuya değer göndermeye izin verecek şekilde yapın ya readonly
da Seç gibi özelliklerle hala kullanılabilen kontrollerle uğraşıyorsanız, pointer-events: none;
etkileşimli olmamak için css stili ekleyin
Bir çeşit hack ama işe yarıyor! Ayrıca javascript kullanmadan doğrudan gönder butonu ile form gönderirken de çalışır. Ekstra çalışmaya gerek yok!
Örneğin:
<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>
Devre dışı bırakılmış ancak işaretlenmiş onay kutuları ile uğraştığımızda ve değeri göndermek istediğimizde, gizli alanımızın @ Html.CheckBoxFor gizli alanından önce göründüğünden emin olmamız gerekir.
cevabı bulduğum bağlantı aşağıdadır. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
Tasos'u genişletmek '(": devre dışı", $ (' # xxxForm ')). removeAttr ("devre dışı"); kullanabilirsiniz:
$("#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
});
Bu, ASP.net'te model değerlerinin gönderilmesine yardımcı olacaktır:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
CheckBox veya CheckBoxFor için genellikle bu yolu kullanıyorum çünkü devre dışı bırakmak değerin kaybolmasına neden oluyor. Salt okunur, onay kutusunda da çalışmaz.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Bu komut dosyasını sayfanızdaki @ bölüm komut dosyalarına koyun. bu, sayfayı gönderdiğinizde girişleri etkinleştirir ve gönderdikten sonra kullanıcıyı başka bir sayfaya yönlendirmeniz gerekir.
<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>