2009-09-10 8 views
8

मैं एएसपी.नेट एमवीसी ढांचे पर देखने के लिए नियंत्रक से एक सरणी पास करने का एक आसान तरीका खोजने के लिए यहां खुद को संघर्ष कर रहा हूं।एएसपी.नेट एमवीसी - दृश्य में एक ऐरे कैसे पास करें?

public class HomeController : ApplicationController 
{ 
    public ActionResult Index() 
    { 
     string[] myArray = { "value01", "value02", "value03"}; 
     ViewData["passedArray"] = myArray; 
     return View(); 
    } 
} 

इसलिए मेरे विचार में मैं ViewData [ "passedArray"] करने के लिए सिर्फ एक फोन है और उस पर एक पाश चलाने होगा:

तो मेरे नियंत्रक में मैं की तरह कुछ होगा।

लेकिन जाहिरा तौर पर ViewDataशायद सरणी डेटा प्रकार पर घोषणा की वजह से System.String, के रूप में देखने के द्वारा प्राप्त किया जा रहा है, लेकिन दुर्भाग्य से मैं कैसे बिना लाखों बनाने के लिए ठीक से और बस इसे पारित करने के लिए पता नहीं है कोड लाइनों के।

यह शानदार होगा अगर कोई मेरी मदद कर सके।

अग्रिम

उत्तर

12

आप दृश्य में कास्ट करने के लिए की जरूरत है

<% var myArray = (string[])ViewData["passedArray"]; %> 
+0

उस agileguy के लिए धन्यवाद आप वास्तव में बहुत चुस्त हैं! बिल्कुल वही जो मैं चाहता था। चियर्स – zanona

8

यह काम करना चाहिए स्ट्रिंग [] के दृश्य के भीतर ViewData [ "passedArray"] कास्टिंग द्वारा धन्यवाद। वैकल्पिक रूप से, यदि आप अतिरिक्त मील जाना चाहते हैं: एक व्यूमोडेल क्लास बनाएं जिसमें इस सरणी को सदस्य के रूप में शामिल किया गया हो और ViewModel को आपके दृश्य के दृढ़ता से टाइप किए गए संस्करण में पास कर दें।

+0

धन्यवाद एक बहुत डेविड के रूप में आप ने कहा कि मैं कास्टिंग इस्तेमाल किया, यह एकदम सही है। लेकिन मुझे चर का प्रबंधन करने के लिए एक विशिष्ट व्यूमोडेल बनाने का विचार पसंद है। मैं इसके बारे में बेहतर तरीके से सूचित करने की कोशिश करूंगा। फिर से धन्यवाद। – zanona

+0

व्यूमोडेल का चयन करने के कुछ अच्छे कारण हैं। (1) एक कलाकार की आवश्यकता रनटाइम त्रुटियों के लिए दरवाजा खुलती है। (2) व्यूमोडेल बनाना आपको भविष्य में सुविधाओं को जोड़ने के लिए लचीलापन देता है क्योंकि आपको दृश्य के प्रकार को बदलने के बिना उन्हें चाहिए। (3) आपके कोड में व्यूडेटा ["कुंजी"] कोड के बिना आपका कोड थोड़ा और पठनीय होगा। –

+0

डेविड, तो आपका मतलब है कि अगर मैं एक MyCustomViewModel जैसे नियंत्रक के लिए एक नई कक्षा बनाता हूं और var myCustomOne = new MyCustomViewModel() जैसे इस वर्ग को पास करता हूं; myCustomOne.myArray = नया int [] {1,2,3,4} वापसी देखें (myCustomOne); मैं अपने दृश्य में उस सरणी तक पहुंचने में सक्षम हूं जैसे: Model.myArray int [] सही है? – zanona

0

आप PartialView इस तरह उपयोग कर सकते हैं:

  • नियंत्रक

    public ActionResult Index() 
        { 
         List<string> arr = new List<string>() { "apple", "banana", "cat" }; 
         return View(arr); 
        } 
    
  • देखें

@model List<string> 
@foreach (var item in Model) { 
     @Html.Partial("~/Views/Shared/Fruits/_myFruits.cshtml", item); 
} 
  • PatialView अर्थात _myFruits.cshtml
@model string 
<li>@Model</li>