2012-06-12 22 views
7

तो मैं एक ViewBag.Something है और इस डेटा बेतरतीब ढंग से उत्पन्न होता है। मेरे विचार में, मैंने इसे @Html.LabelFor(m => m.Something, (string)ViewBag.Something) जैसे लेबल पर सेट किया है। यह अच्छी तरह से बाहर काम करता है लेकिन जब मैं प्रपत्र सबमिट कोई त्रुटि हो सकता है और त्रुटियां होने पर, मैं इस लेबल की जरूरत है एक ही रहने के लिए, मैं गतिशील/यादृच्छिक डेटा प्राप्त नहीं करना चाहते तो मैं नियंत्रक विधि है कि उत्पन्न फोन नहीं होगा यह व्यूबैग क्या मेरे नियंत्रक में कुछ निजी चर के बिना इस मान को बनाए रखने का कोई तरीका है? कुछ अच्छा तरीका है कि एमवीसी/रेजर यह करता है?एक फॉर्म पोस्ट के बाद ViewBag डेटा कैसे सहेजा जा सकता है?

उत्तर

1

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

+0

इसमें एक सुरक्षा समस्या है। अगर कोई कोड का निरीक्षण करता है तो वे डेटा प्राप्त करने या यहां तक ​​कि संशोधित करने में सक्षम होंगे ... क्या यह एक वस्तु है तो क्या होगा? – Nick

12

विकल्प 1:

मार्ग मान का उपयोग करके नियंत्रक करने के लिए "ViewBag.Something" का मान दर्रा:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something }) 

विकल्प 2: आप TempData उपयोग कर सकते हैं।

public ActionResult Index() 
{ 
var Something = "YOURVALUE"; 
TempData["Something"] = Something; 
....... 
} 


public ActionResult OtherAction() 
{ 
    var Something = TempData["Something "]; 
    ........... 
} 

के बीच लड़ाई के तरीके

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

एक कार्रवाई विधि नियंत्रक के TempDataDictionary वस्तु में डाटा स्टोर करने से पहले इसे अगली कार्रवाई आह्वान करने के लिए नियंत्रक के RedirectToAction विधि कॉल कर सकते हैं। TempData संपत्ति मान सत्र स्थिति में संग्रहीत किया जाता है। किसी भी क्रिया विधि जिसे TempDataDictionary मान के बाद बुलाया जाता है, ऑब्जेक्ट से मान प्राप्त कर सकता है और फिर उन्हें संसाधित या प्रदर्शित कर सकता है। TempData का मान तब तक जारी रहता है जब तक कि इसे सत्र के समय तक पढ़ा न जाए। इस तरह से TempData बने, इस तरह के रूप में पुनर्निर्देशन परिदृश्यों में सक्षम बनाता है क्योंकि TempData में मानों एक ही अनुरोध परे उपलब्ध हैं।

+0

तो मैं जब मैं प्रस्तुत मारा एक tempdata में ViewBag.Something स्टोर और होगा अगर कुछ गलत हो जाता है, तो यह उपयोग के लिए उपलब्ध होगा? यही कारण है कि समस्या पैदा कर सकता है, क्योंकि मेरी लेबल ViewBag से डाला जा रहा है और अब मैं लगता है कि मैं अगर किसी प्रकार की आवश्यकता होगी? – Pittfall

+0

एक और विकल्प के लिए मेरा अपडेट देखें जिसे आप आजमा सकते हैं। –

+0

मदद के लिए धन्यवाद, यह अच्छा लग रहा है लेकिन मैं एक अलग दिशा में चला गया, इसलिए मैं आपका जवाब स्वीकार नहीं कर सकता – Pittfall

-1

viewbag में संदेश प्रदर्शित (इस विधि मैं उपयोगकर्ता)

ActionResult SubmitUser(){ 

    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 


[HtttpPost] 
ActionResult SubmitUser(){ 

TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 

पोस्टिंग के बाद मूल्य .. विधि प्राप्त करने के लिए भेज रहा है