2012-04-12 11 views
12

मैं वर्तमान में डेटा की एक सूची काम कर रहा हूं जिसे मुझे एक ऐसे दृश्य में प्रदर्शित करने की ज़रूरत है जो एक सूची का प्रतिनिधित्व करे और प्रत्येक आइटम के लिए इसी क्रिया को निष्पादित किया जा सके जिसे संपादित किया जा सके, जैसे उन्हें संपादित करें या उन्हें हटाओ। संस्करण के लिए कोई समस्या नहीं है कि यह एक विशेष विचार है। मेरी समस्या यह है कि जब मैं कोई आइटम हटाना चाहता हूं, तो मेरे पास पोस्ट विधि में दो विकल्प हैं।एक पोस्ट विधि में एमवीसी 3 रीडायरेक्ट टॉक्शन और व्यूबैग दमन

//Call directly the list 
[HttpPost] 
[Authorize] 
public ActionResult Delete(int itemId) 
{ 
    // logic to delete an item 
    ViewBag.Error = ""; // The result of the execution 
    return List(); 
} 

इस समाधान के साथ बात यह है कि यूआरएल नहीं रह गया है पहले एक रूप में ही है: .../सूची, यह है .../अब हटाएँ, मैं नहीं इस समाधान महान मिल रहा है, अन्य समाधान कार्रवाई पर रीडायरेक्ट करना है, अब यूआरएल अच्छा है, लेकिन दृश्य में त्रुटि संदेश अब दिखाई नहीं दे रहा है, क्या आपके पास कुछ बेहतर विचार है।

उत्तर

35

आप TempData उपयोग कर सकते हैं की जानकारी को बनाए करने के लिए एक अनुरोध में और यह इस सटीक उपयोग के मामले के लिए था। ViewBag का उपयोग करने के बजाय TempData["Error"] = ""; का उपयोग करें।

[HttpGet] 
public ActionResult List() { 
    ViewBag.Error = TempData["Error"]; 
    // ... 
    return View(); 
} 

ASP.NET TempData persists between requests और When to use ViewBag, ViewData, or TempData in ASP.Net MVC 3 देखें: फिर, प्राप्त अंत पर आप निम्नलिखित की तरह एक टुकड़ा होगा।

+1

नियंत्रक में ViewBag.Error = TempData ["त्रुटि"] सेट करने के लिए अच्छा सुझाव, ताकि दृश्य को इस विवरण के बारे में चिंतित न होने की आवश्यकता हो। –

+0

हाँ, मैं इसे स्वयं दृश्य में इस्तेमाल करता था, लेकिन फिर मेरे पास देखने के लिए बहुत से तर्क थे, जिससे वे चर को देख सकते हैं। मैं सभी आवश्यक जानकारी को पकड़ने और इसे देखने के लिए पास करने के लिए नियंत्रक का उपयोग करता हूं। – Joshua

+0

उत्तर के लिए जोशुआ बहुत धन्यवाद, यह ठीक काम करता है, और पढ़ने के संसाधनों के लिए भी धन्यवाद। – Oflocet

13

यदि आप रीडायरेक्ट कर रहे हैं, तो ViewBag के बजाय TempData का उपयोग करने का प्रयास करें। TempData एक शब्दकोश है जो उपयोगकर्ता के सत्र में अगले पृष्ठ अनुरोध तक कुंजी/मानों को संरक्षित करता है। अपने नियंत्रक में:

TempData["Error"] = "A message goes here"; 

अपने सूची दृश्य में आपके रीडायरेक्ट कर रहे हैं कि:

@TempData["Error"] 

या यदि आप उस्तरा प्रयोग नहीं कर रहे:

<%= TempData["Error"] %> 
+0

धन्यवाद Esker। – Oflocet

1

ActionResult पोस्ट करने के लिए ViewBag का उपयोग करना: उत्तर के लिए

ActionResult SubmitUser() 
{ 
    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 

[HtttpPost] 
ActionResult SubmitUser() 
{ 
    TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 
संबंधित मुद्दे