2012-01-10 12 views
7

में देखने के लिए नियंत्रक से स्ट्रिंग पास करने के लिए व्यूडेटा का उपयोग करके मैं Controller से View पर एक यादृच्छिक string पास करने का प्रयास कर रहा हूं।ASP.NET MVC3

यहाँ मेरी Controller कोड है:

[HttpPost] 
    public ActionResult DisplayForm(UserView user) 
    { 
     //some data processing over here 
     ViewData["choice"] = "Apple"; 

     return RedirectToAction("Next", "Account"); 
    } 

अब मैं मेरे विचार Next.cshtml जो बनाई गई है करने के लिए कि डेटा मान "एप्पल" पास करना चाहते हैं इस प्रकार है:

//View: Next.cshtml 

    @{ 
    ViewBag.Title = "Thanks for registering"; 
    Layout = "~/Content/orangeflower/_layout.cshtml"; 
    } 
    <p>Your favorite fruit is:</p>@ViewData["choice"] 

लेकिन मैं नहीं पा रहा हूँ प्रोजेक्ट चलाते समय ब्राउजर में अपना डेटा देखने के लिए।

यहाँ स्नैपशॉट है:

1) डिबग पर, नियंत्रक मूल्य दिखा:

enter image description here

2) ब्राउज़र दृश्य

मूल्य "एप्पल" प्रदर्शित नहीं करता है

enter image description here

3) मेरे Next.cshtml पर आगे डीबग पर देखें: enter image description here

मूल्य को सही तरीके से देखने के लिए क्यों पास नहीं किया जा रहा है। Next और DisplayForm के लिए मेरे नियंत्रक दोनों एक ही नियंत्रक AccountController.cs के भीतर हैं, फिर भी प्रदर्शित होने वाले मूल्य नहीं हैं।

क्या कोई इसे हल करने में मेरी सहायता कर सकता है?

उत्तर

11

आप एक दृश्य प्रस्तुत नहीं कर रहे हैं, आप रीडायरेक्ट कर रहे हैं। आप दृश्य tyo कुछ जानकारी पारित करने के लिए करना चाहता था, तो आप ViewData में जोड़ने के बाद इस दृश्य पर लौटने के लिए की जरूरत है:

[HttpPost] 
public ActionResult DisplayForm(UserView user) 
{ 
    //some data processing over here 
    ViewData["choice"] = "Apple"; 

    return View(); 
} 

आप TempData बजाय ViewData इस्तेमाल कर सकते हैं आप एक संदेश है कि एक रीडायरेक्ट के बाद बच जाएगा पास करना चाहते हैं।

[HttpPost] 
public ActionResult DisplayForm(UserView user) 
{ 
    //some data processing over here 
    TempData["choice"] = "Apple"; 

    return RedirectToAction("Next", "Account"); 
} 

फिर अगला कार्रवाई के अंदर आप TempData से डेटा लाने और ViewData के अंदर संग्रहित है जिससे कि दृश्य उसे पढ़ सकते हैं सकता है।

+0

ओह तो मुझे अपने कोड के अनुसार वापसी दृश्य ("अगला", "खाता") लिखना होगा यदि मैं रीडायरेक्ट नहीं कर रहा हूं? –

+0

@ पार्थदोशी, हाँ, अगर आप सीधे व्यूडेटा का उपयोग करना चाहते हैं। लेकिन अगर आप रीडायरेक्ट-आफ-पोस्ट पैटर्न रखना चाहते हैं तो आप मेरे उत्तर में दिखाए गए टेम्पपडेटा का उपयोग कर सकते हैं। –

+0

धन्यवाद यह काम किया !! :) –

1

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

+1

धन्यवाद! यह वास्तव में बहुत मददगार था। –

+0

बहुत अच्छा सवाल लेआउट और स्पष्टीकरण। –

+0

धन्यवाद! कभी-कभी मुझे लगता है कि स्टैक ओवरफ्लो हमें दो उत्तरों, एक प्राथमिक और दूसरे को माध्यमिक उत्तर के रूप में स्वीकार करने की अनुमति दे सकता है।हालांकि, मुझे किसी अन्य उपयोगकर्ता का उत्तर मिला, मुझे लगा कि मेरे कोड में गलती को समझने के लिए आपका जवाब भी काफी अच्छा था, इसलिए त्वरित उत्तर के लिए धन्यवाद –

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