Devre dışı girişi ASP.NET MVC'de nasıl gönderebilirim?


108

Devre dışı girişi ASP.NET MVC'de nasıl gönderebilirim?


3
Genellikle sorunuzu bir soru olarak ifade etmeniz ve ardından yanıtı ayrı olarak göndermeniz gerekir. Kapatma oylaması; 'cevap' bölümünü gerçek bir cevaba taşımanızı tavsiye ederiz.
George Stocker

1
@Dhaval postasının, sorunuzdaki engelli kelimesi nedeniyle tam olarak cevap olduğuna inanıyorum.
QMaster

Yanıtlar:


160

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 SELECTetiket bir istisnadır.


1
salt okunur çalışır, ancak alanı grileştirmez. İşte kullandığım bir örnek: <%: 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 ....
VoodooChild

22
4 yıldır .net asp yapıyorum ve engelli girişlerin geri gelmediğini hiç bilmiyordum ... bu nasıl geçti? Sadece devre dışı bırakılmış seçim için Gizli bir alan ekleyin ve hepsi sıralanır. (Kimlikler izin verilmeyen formda tekrarlansa bile)
Piotr Kula

5
Bu, type="checkbox"girişler için de çalışmıyor
Nathan

1
Aynı şeyi radyo düğmeleriyle yapmaya çalışıyorum, ancak salt okunur gibi görünmüyorlar.
Randy R

38

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.


1
Bu benim için pek işe yaramadı ( bu SO bağlantısı sayesinde anladım ). Bu işe yaradı: textBox.Attributes.Add("readonly", "readonly");ve açıklama bağlantıda
brian-d

Düzenlemen iyi oldu, çünkü bu benim için daha anlamlı.
Yawar

salt okunur gibi görünüyor. Kontrolü geri getirmemek gibi garip şeyler yapmaz, ancak düzenlemeye izin vermez. Muchas Gracias!
Mariusz

Michael Brennt'ın yorumuna eklemek gerekirse, jQuery kullanıyorsanız ikinci satır olur $("#textBoxId").css("color", "#c0c0c0").
F1Krazy

30

@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 idve eğer gizli alanı önce koyarsanız, javascript bunu select.


20

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.


Evet, dava ettiğin şeyi yapmayı düşünüyordum. Ama daha fazla değişkenle uğraşmam gerekiyordu. Umarım bu benim yazım Google'da görünecek ve insanlar acı çekmek zorunda kalmayacak, kolay bir çözüm arıyor.
Sanchitos

4
Çözümünüzle ilgili bir sorun, javascript devre dışı bırakıldığında çözülmesidir. Gizli alan sunucu tarafının enjekte edilmesinde bu sorun yoktur.
tvanfosson

15

Form gönderilmeden önce de şu şekilde kod kullanabilirsiniz:

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

2
Bunu kullandım, gizli öğeler için endişelenmeme gerek yok, herhangi bir dezavantaj olup olmadığından emin değilim, js işlevi nedeniyle geri göndermede küçük bir gecikme olabilir
IronHide

2
Sadece okuma yerine devre dışı bırakmayı kullanmakla ilgili bahsi geçen cevapların çoğuna karşın, çoğu durumda engelli kullanmamız gerektiğine inanıyorum, benzer sorularda yaklaşık 15 cevap okudum ve devre dışı bırakılan özniteliği kaldırmak için uygun öğeleri seçmek için kendi jQuery filtresiyle bunu seçtim, harika Teşekkürler.
QMaster

Ya ile gönderiyorsanız Ajax.BeginForm?
markzzz


1
biraz tuhaf görünüyor, ama benim için işe
yarayan

8

Tasarım gereği tarayıcılar bunu desteklemiyor.

Ya bunları readonlysunucuya değer göndermeye izin verecek şekilde yapın ya readonlyda 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>

6

Aşağıdaki gibi bir düzenleyici şablonu oluşturabilirsiniz

CSS

.disabled {
    background-color:lightgray;
}

Düzenleyici Şablonu

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


1

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
});

1

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)");

1
Lütfen cevabınızı biçimlendirin . bu onu herkes için daha okunaklı hale getiriyor
Tarick Welling

0

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)

0

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>


-3

Sadece o görünüme bağlı ViewModel'de bu özelliği [Gerekli] yapın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.