मैं एक ASP.NET MVC 3 आवेदन जो एक पोस्ट कार्रवाई Create
कहा जाता है की है। क्या जावास्क्रिप्ट के उपयोग और बटन को अक्षम किए बिना इसे रोकने का कोई तरीका है, मैंने सोचा कि RedirectToAction
का उपयोग करने का पूरा उपयोग पोस्ट/रीडायरेक्ट/डिज़ाइन पैटर्न का उपयोग करके इसे रोकने के लिए था?रोकें डबल फ़ॉर्म सबमिशन
उत्तर
पैटर्न आप (पोस्ट/रीडायरेक्ट/डिजाइन प्रतिरूप जाओ) का उल्लेख होने से बचाता है पेज डबल पोस्टिंग से ताज़ा करता है क्योंकि अंतिम क्रिया एक है, न कि पोस्ट है।
आप डबल पोस्टिंग से दो बार क्लिक रोकना चाहते हैं आप:
1. Disable the button after click 2. Maintain a unique index on 'Issues' and look for duplicates 3. Maintain something in session that gives you an indication of a double post
और वहाँ शायद कुछ और तरीके ... मैं बटन को निष्क्रिय करने लगता है कि शायद इसलिए कि आप सबसे आसान है वैसे भी किसी अन्य पेज पर रीडायरेक्ट कर रहे हैं।
यह उपर्युक्त उदाहरण के लिए ठीक है, लेकिन जिस बिंदु पर मैं प्राप्त कर रहा था वह अधिक उन्नत उदाहरणों के लिए है, उदाहरण के लिए Ajax.BeginForm जो केवल पृष्ठ के हिस्से को अपडेट करेगा – CallumVass
@ बिफबैफ़बॉफ़ - क्लाइंट साइड (AJAX POST) पर डबल क्लिकिंग को रोकने के लिए, आप केवल यूआई को अवरुद्ध कर सकते हैं जब तक कि प्रतिक्रिया वापस न आए (सिंक्रोनस), या बटन को अक्षम करें (एसिंक्रोनस), या इसे पहचानने के लिए कुछ सर्वर-साइड लागू करें। –
हाय क्रिस, यह वही है जो मैंने अभी किया है। जब तक प्रतिक्रिया वापस आ गई है तब तक मैंने बटन को अक्षम कर दिया है। एक बार फिर धन्यवाद – CallumVass
जब आप उपयोगकर्ता को फॉर्म दिखाते हैं तो आप कोई समस्या उत्पन्न कर सकते हैं, फिर जांचें कि आपके पास अपनी बनाएं विधि में ऐसी आईडी के साथ पहले से कोई समस्या नहीं है और, उदाहरण के लिए, ऐसे अनुरोध छोड़ दें।
if (ModelState.IsValid)
{
DateTime now = DateTime.Now;
if (Session["LastAdd"] == null || (now - (DateTime)Session["LastAdd"]).TotalMilliseconds > 1000)
{
//first time, or more than a second passed since last addition
context.Issues.Add(issues);
context.SaveChanges();
Session["LastAdd"] = now;
}
return RedirectToAction("Index");
}
वैसे यह आईडी को जोड़ना जारी रखेगा क्योंकि IssueId मेरा पीके फ़ील्ड है इसलिए हर नए मुद्दे के लिए, इसमें एक नया आईडी (2, 3, 4, 5 इत्यादि ..) – CallumVass
सबसे आसान तरीका मैं के बारे में सोच सकते हैं सत्र का उपयोग है!
क्लिक होने पर सबमिट बटन को अक्षम करें। अंत।
$('submitButtonId').click(function(){
$(this).prop('disabled', true);
$(this).attr('disabled', 'disabled'); // for jQuery versions < 1.6.
});
क्षमा करें, मैं सत्रों का उपयोग नहीं करता एक विंडोज प्रमाणीकरण अनुप्रयोग – CallumVass
@ बिफबाफबॉफ़ - 'सत्र' चर का उपयोग शुरू करें। –
@ बिफ सत्र चर के प्रमाणीकरण के साथ कुछ भी नहीं मिला। आपको इस तरह क्या लगता है? –
आसान समाधान:
इस समाधान के साथ, यदि उपयोगकर्ता को क्लिक करने और सर्वर पर जानकारी अपलोड करने के बीच नेटवर्क समस्या है, तो फॉर्म में जानकारी को सहेजने का कोई तरीका नहीं है। यदि उपयोगकर्ता ने फॉर्म भरने में 5 मिनट बिताए हैं तो वे परेशान होंगे। एक बेहतर तरीका शायद तब तक अक्षम होना है जब तक कि नेटवर्क सफल न हो या विफल हो जाए। –
यह जावास्क्रिप्ट अक्षम के साथ काम नहीं करेगा? –
@AlexAngas, जावास्क्रिप्ट अक्षम होने पर कुछ भी काम नहीं करेगा। मुझे नहीं लगता कि जेएस के बिना ऐसा करने का एक अच्छा तरीका है। (नीचे _Shadow Wizard_ उत्तर हार्ड कोडिंग 1000 एमएस है, जो आदर्श होने से बहुत दूर है, क्या होगा यदि उपयोगकर्ता के पास धीमी नेटवर्क कनेक्शन है?) – gdoron
पीआरजी पैटर्न इसे रोक नहीं पाएगा, क्योंकि इसमें पी कार्रवाई में समय लगता है (जो आमतौर पर मामला होता है) और उपयोगकर्ता फिर से फॉर्म सबमिट कर सकता है (क्लिक या ब्राउज़र रीफ्रेश के माध्यम से), जिससे पीआरजी पैटर्न का कारण बन जाएगा "असफल"।
ध्यान दें कि दुर्भावनापूर्ण उपयोगकर्ता त्वरित उत्तराधिकार में एकाधिक http पोस्ट चलाकर अपने सभी क्लाइंट साइड उपायों को भी बाईपास कर सकते हैं।
उपर्युक्त सभी का समाधान निम्न विधि का उपयोग करके सर्वर पक्ष पर डुप्लिकेट सबमिशन की जांच करना है, जैसा कि स्वयं द्वारा वर्णित है, here।
आपकी सुविधा के लिए, मैं बोली:
"यदि आप अपने फार्म में एक छिपे हुए विरोधी जालसाजी टोकन का इस्तेमाल करते हैं तो (जैसा कि आप चाहिए), आप विरोधी जालसाजी टोकन पर कैश कर सकते पहले प्रस्तुत और कैश से टोकन हटाने यदि आवश्यक हो, या समय की निर्धारित राशि के बाद कैश की गई प्रविष्टि समय सीमा समाप्त हो।
फिर आप कैश के खिलाफ प्रत्येक अनुरोध के साथ जांच करने के लिए सक्षम हो जाएगा कि क्या विशिष्ट रूप प्रस्तुत किया गया है और इसे अस्वीकार अगर यह है। "
- 1. रोकथाम डबल फ़ॉर्म सबमिशन
- 2. AJAX बनाम फ़ॉर्म सबमिशन
- 3. डुप्लिकेट अजाक्स सबमिशन रोकें?
- 4. फ़ॉर्म को कैसे रोकें
- 5. के बाद fancybox AJAX फ़ॉर्म सबमिशन
- 6. jQuery के साथ फ़ॉर्म के सबमिशन को अनुकरण कैसे करें?
- 7. फ़ॉर्म सबमिशन एएसपी.नेट एमवीसी बैक बटन को कैसे संभालें?
- 8. फ़ॉर्म सबमिट करने से कैसे रोकें?
- 9. फ़ॉर्म को कैसे रोकें भरोसेमंद तरीके से सबमिट करें?
- 10. क्या एएसपी.नेट वेब फॉर्म डबल क्लिक सबमिशन को रोकता है?
- 11. रोकें jQuery मोबाइल स्वाइप ईवेंट डबल बबलिंग
- 12. सबमिशन
- 13. सबमिशन
- 14. कैप्चा स्पैम सबमिशन
- 15. AJAX फॉर्म सबमिशन
- 16. event.preventDefault() के माध्यम से सबमिट करने से फ़ॉर्म को रोकें;
- 17. मोबाइल सफारी कीबोर्ड फॉर्म सबमिशन
- 18. एनपीएम सबमिशन
- 19. गिट सबमिशन
- 20. गिट सबमिशन?
- 21. Html.BeginForm सबमिशन
- 22. डबल? = डबल? + डबल?
- 23. एंटर दबाकर फ़ॉर्म सबमिशन को अक्षम करें क्योंकि मैं अजाक्स कार्यक्षमता
- 24. फ़ील्ड खाली होने पर jquery ujs के साथ फ़ॉर्म सबमिशन को रोकना
- 25. डबल क्लिक पर टेक्स्ट का चयन कैसे रोकें?
- 26. a4j के साथ डबल सबमिट रोकें: कमांड बटन
- 27. एक Google डॉक्स फॉर्म सबमिशन
- 28. गिट सबमिशन जोड़ना जिसमें एक और सबमिशन शामिल है?
- 29. jQuery मोबाइल और फॉर्म सबमिशन
- 30. एकाधिक सबमिशन सर्वर-साइड
क्या आप बस कुछ (जैसे context.Issues.Exists (तर्क)) जोड़ सकते हैं? –
क्लिक करते समय सबमिट बटन को बस अक्षम करें! – gdoron
Exists नामक ऐसी कोई विधि नहीं है? – CallumVass