मैं ASP.NET MVC में अक्षम इनपुट कैसे सबमिट करूं?


108

मैं ASP.NET MVC में अक्षम इनपुट कैसे सबमिट करूं?


3
आम तौर पर आपको अपने प्रश्न को एक प्रश्न के रूप में वाक्यांशित करने की आवश्यकता होती है और फिर उत्तर को अलग से पोस्ट करना होता है। बंद करने के लिए मतदान; आपको 'उत्तर' भाग को वास्तविक उत्तर में ले जाने की सलाह देते हैं।
जॉर्ज स्टॉकर

1
मेरा मानना ​​है कि @Dhaval पोस्ट आपके प्रश्न में अक्षम शब्द के कारण बिल्कुल उत्तर है।
QMaster

जवाबों:


160

क्या आप readonly="readonly"इसके स्थान पर फ़ील्ड नहीं बना सकते disabled="disabled"? उपयोगकर्ता द्वारा गैर-संपादन योग्य होते हुए भी सर्वर पर आसानी से फ़ील्ड मान सबमिट किया जाएगा। एक SELECTटैग हालांकि एक अपवाद है।


1
आसानी से काम करता है, लेकिन यह क्षेत्र से बाहर ग्रे नहीं करता है। यहां एक उदाहरण है जिसका मैं उपयोग <%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>कर रहा हूं : मैं इसे कैसे ग्रे कर सकता हूं, इसलिए यह नेत्रहीन दिखता है कि यह संपादन योग्य नहीं है। बेहतर अभी तक हम LabelFor के समान कुछ का उपयोग कर सकते हैं, मैंने LabelFor की कोशिश की, लेकिन यह केवल DisplayName हो जाता है ....
VoodooChild

22
4 साल कर रहे हैं .net asp और मुझे कभी नहीं पता था कि विकलांग इनपुट वापस नहीं मिलता है ... मुझे कैसे गुजरना पड़ा? बस विकलांग चयन के लिए एक छिपे हुए क्षेत्र को शामिल करें और इसके सभी क्रमबद्ध (भले ही आईडी उस रूप में दोहराए जाते हैं जो अनुमति नहीं है)
पिओट्र कुला

5
यह type="checkbox"इनपुट के लिए भी काम नहीं करता है
नाथन

1
मैं रेडियो बटन के साथ एक ही काम करने की कोशिश कर रहा हूं, लेकिन आसानी से उन पर काम नहीं कर रहा है।
रैंडी आर

38

सभी को धन्यवाद:

जिस तरह से मैंने इसे हल किया:

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";

ध्यान दें:

मुझे यह जानकारी उत्तर पर मिली लेकिन मैं संपादित हो गया।


1
यह मेरे लिए काफी काम नहीं था (यह इस एसओ लिंक के लिए धन्यवाद पता लगा )। यह काम किया: textBox.Attributes.Add("readonly", "readonly");और स्पष्टीकरण लिंक में है
ब्रायन-डी

यह अच्छा है कि आपने इसे संपादित किया क्योंकि यह मेरे लिए अधिक समझ में आ रहा है।
यवर

जाने के लिए रास्ता लगता है। यह अजीब चीजें नहीं करता है जैसे नियंत्रण वापस नहीं करना है लेकिन इसे संपादित करने की अनुमति नहीं देता है। मुचस ग्रेसिया!
मारिउज़

माइकल ब्रेनट की टिप्पणी में जोड़ने के लिए, यदि आप jQuery का उपयोग कर रहे हैं तो दूसरी पंक्ति बन जाती है $("#textBoxId").css("color", "#c0c0c0")
F1Krazy

30

@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 नहीं है और जावास्क्रिप्ट के साथ सिरदर्द पैदा कर सकता है। मेरे लिए, मेरे पास इसके html द्वारा ड्रॉपडाउन का मान सेट करने के लिए जावास्क्रिप्ट है id, और यदि आप पहले छिपे हुए फ़ील्ड को डालते हैं, तो जावास्क्रिप्ट को इसके बजाय मिल जाएगा select


20

आमतौर पर, अगर मेरे पास एक फ़ील्ड है जो "रीड-ओनली" है, लेकिन सर्वर पर वापस सबमिट करने की आवश्यकता है, तो मैं डिस्प्ले को डिसेबल (या बस टेक्स्ट) कर दूंगा, लेकिन फिर उसी नाम के साथ एक हिडन फ़ील्ड जोड़ें। आपको अभी भी यह सुनिश्चित करने की आवश्यकता है कि फ़ील्ड वास्तव में सर्वर-साइड पर संशोधित नहीं है - बस इसे अपने एक्शन में मॉडल से अपडेट न करें - लेकिन त्रुटियां होने पर मॉडल स्थिति अभी भी सटीक होगी।


हां, मैं वह करने की सोच रहा था जो आप कर रहे हैं। लेकिन मुझे अधिक चर को संभालना होगा। मैं hopping हूँ कि हो सकता है कि मेरी पोस्ट Google में दिखाई दे और लोगों को भुगतना न पड़े, एक आसान समाधान की तलाश में।
संचितोस

4
आपके समाधान के साथ एक समस्या यह है कि यह टूटता है अगर जावास्क्रिप्ट को अक्षम कर दिया जाता है। छिपे हुए फ़ील्ड सर्वर-साइड को इंजेक्ट करने से यह समस्या नहीं होती है।
tvanfosson

15

प्रपत्र सबमिट करने से पहले आप इस तरह कोड का उपयोग भी कर सकते हैं:

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

2
मैं इस प्रयोग किया जाता है, छिपा तत्वों के बारे में चिंता की जरूरत नहीं है, नहीं यकीन है कि अगर कोई नुकसान कर रहे हैं, जे एस के कारण पद पीठ पर शायद कुछ देरी सिवाय ढंग से काम
Ironhide

2
पढ़े जाने वाले विकलांगों का उपयोग करने के बारे में उल्लेख किए गए कई उत्तरों के खिलाफ, मेरा मानना ​​है कि कई मामलों में हमें विकलांगों का उपयोग करने की आवश्यकता है, मैंने इसी तरह के प्रश्नों में लगभग 15 उत्तरों को पढ़ा और विकलांग विशेषताओं को हटाने के लिए उपयुक्त तत्वों का चयन करने के लिए केवल स्वयं के jQuery फ़िल्टर के साथ इसे चुना, महान धन्यवाद।
QMaster

यदि आप साथ जमा कर रहे हैं तो क्या होगा Ajax.BeginForm?
markzzz

OnBegin का उपयोग करें " msdn.microsoft.com/en-us/library/… "
धवल पखानिया

1
थोड़ा अजीब लगता है, लेकिन यह एकमात्र समाधान था जो मेरे लिए काम करता था ...
AGuyCalledGerald

8

डिज़ाइन ब्राउज़रों द्वारा इसका समर्थन नहीं किया जाता है।

या तो उन्हें बनाएं readonlyजो सर्वर पर मान जमा करने की अनुमति देता है या यदि आप उन नियंत्रणों के साथ काम कर रहे हैं जो अभी भी readonlyचयन जैसे विशेषता के साथ उपयोग करने योग्य हैं , pointer-events: none;तो उन्हें गैर-संवादात्मक बनाने के लिए सीएसएस शैली जोड़ें

एक हैक की तरह है, लेकिन काम करता है! यह तब भी काम करता है जब आप जावास्क्रिप्ट का उपयोग किए बिना सीधे सबमिट बटन के साथ फॉर्म जमा कर रहे हों। कोई अतिरिक्त काम की आवश्यकता नहीं है!

उदाहरण के लिए:

<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

आप नीचे दिए गए की तरह एक संपादक टेम्पलेट बना सकते हैं

सीएसएस

.disabled {
    background-color:lightgray;
}

संपादक टेम्पलेट

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

2

जब हम अक्षम लेकिन चेक किए गए चेकबॉक्स के साथ काम कर रहे होते हैं और हम मूल्य पोस्ट करना चाहते हैं, तो हमें @ Html.CheckBoxFor छिपे हुए फ़ील्ड से पहले हमारे छिपे हुए फ़ील्ड को सुनिश्चित करना होगा।

निम्नलिखित वह लिंक है जहाँ से मुझे उत्तर मिला है। http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033


1

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


0

मैं आमतौर पर चेकबॉक्स या चेकबॉक्स के लिए इस तरह का उपयोग करता हूं क्योंकि इसे अक्षम करने से मूल्य कम हो रहा है। Readonly चेकबॉक्स पर काम नहीं करता है और न ही।

@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)

0

इस स्क्रिप्ट को अपने पेज में @ स्क्रिप्ट स्क्रिप्ट में डालें। जब आप पृष्ठ सबमिट करते हैं तो यह इनपुट को सक्षम करेगा, और आपको सबमिट करने के बाद उपयोगकर्ता को किसी अन्य पृष्ठ पर पुनर्निर्देशित करना चाहिए।

<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

बस उस संपत्ति को [आवश्यक] ViewModel में उस दृश्य से लिंक करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.