2010-04-13 21 views
5

मेरे पास एक ऐसा फॉर्म है जो उपयोगकर्ता को डेटा में कुंजी और फिर जमा करने की अनुमति देता है। यदि सब कुछ इस क्रिया परिणाम पर अच्छा काम करता है, तो मैं उपयोगकर्ता को धन्यवाद पृष्ठ पर रीडायरेक्ट कर दूंगा।फ़ॉर्म सबमिशन एएसपी.नेट एमवीसी बैक बटन को कैसे संभालें?

मेरी समस्या अभी यह है कि जब उपयोगकर्ता बैक बटन पर क्लिक करता है, तो वे फॉर्म पेज पर वापस जा सकेंगे और इनपुट अभी भी वहां होंगे।

और यदि उपयोगकर्ता बस सबमिट करने पर क्लिक करें, तो मुझे कुछ संभावित अजीब बग मिलेंगे।

इसलिए asp.net mvc के संदर्भ में, बैक बटन पर क्लिक करने वाले उपयोगकर्ताओं को संभालने का सबसे अच्छा तरीका क्या है?

धन्यवाद!

उत्तर

1

"संभावित अजीब बग" से आपका क्या मतलब है? मुझे संदेह है कि उपयोगकर्ता दोबारा सबमिट करने पर क्लिक करेगा जब तक वे एक ही चीज़ को दोबारा पोस्ट नहीं करना चाहते थे। मैं डुप्लिकेट पोस्ट नहीं चाहता हूं, पोस्ट करने से पहले अपने डीबी के खिलाफ सामग्री की जांच करें।

आप वास्तव में लोग दो बार एक ही रूप पोस्टिंग नहीं करना चाहते, यादृच्छिक रूप से जनरेट संख्या में डाला, तो (सिर्फ यकीन है कि यह टकराव से बचने के लिए, या यूजर आईडी का एक संयोजन और एक सटीक टाइमस्टैम्प की तरह कुछ का उपयोग करने के लिए पर्याप्त यादृच्छिक है बनाना) एक छिपे हुए क्षेत्र में, अपने डेटा के साथ इसे सहेजें और जांचें कि यह कुछ भी सहेजने से पहले आपके डीबी में पहले से मौजूद नहीं है।

+0

चूंकि एएसपीएनटी एमवीसी स्टेटलेस है, इसलिए मैं बस सोच रहा था कि उनके पास इसे संभालने के लिए एक नई शेबैंग विधि या सर्वोत्तम अभ्यास है। – melaos

+0

मुझे पसंद नहीं है जब लोग कुछ विधि का दावा करते हैं "सर्वोत्तम अभ्यास" है। –

+0

लॉल सच है, लेकिन बदसूरत हैक्स है और फिर उपयोग करने के लिए बेहतर प्रयास और परीक्षण विकल्प हैं। मैं जितना संभव हो सके पूर्व से बचने की कोशिश करता हूं। – melaos

6

यह समाधान दोनों पूरे नियंत्रक या एक विशिष्ट कार्रवाई के लिए पूरी तरह से काम करता है, बस [NoCache]

/// <summary> 
/// Prevent a controller or specific action from being cached in the web browser. 
/// For example - sign in, go to a secure page, sign out, click the back button. 
/// <seealso cref="https://stackoverflow.com/questions/6656476/mvc-back-button-issue/6656539#6656539"/> 
/// </summary> 
public class NoCacheAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     var response = filterContext.HttpContext.Response; 
     response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
     response.Cache.SetValidUntilExpires(false); 
     response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     response.Cache.SetCacheability(HttpCacheability.NoCache); 
     response.Cache.SetNoStore(); 
    } 
} 

जोड़ सकते हैं और अपने कोड में:

[NoCache] 
[Authorize] 
public class AccountController : Controller 
{ ... } 

मूलतः यहां पोस्ट: MVC Back button issue

संबंधित मुद्दे