views:

940

answers:

2

Hello there, I'm struggling myself here, to find a easy way to pass an array from the controller to the view on ASP.NET MVC framework.

so in my controller I would have something like:

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

so in my view I would have just a call to ViewData["passedArray"] and run a loop on it.

But apparently the ViewData is being received by the view as System.String, probably because of the declaration on the Array DataType, but unfortunately I don't know how to pass it properly and simply without create millions of code lines.

It would be fantastic if one could help me.

Thanks in advance

+5  A: 

This should work by casting ViewData["passedArray"] within the view to string[]. Alternatively, if you want to go the extra mile: create a ViewModel class that contains this array as a member and pass that ViewModel to a strongly-typed version of your view.

David Andres
Thanks a lot David I used the casting as you said, it's perfect.But I like the idea to create a specific viewmodel to manage variables.I will try to inform myself better about it.Thanks again.
ludicco
There are quite a few good reasons for opting for a ViewModel. (1) The need for a cast opens the door to runtime errors. (2) Creating a ViewModel gives you flexibility in the future to add features as you need them without having to change the type of the view. (3) Your code will slightly more readable without ViewData["key"] code littered in your view.
David Andres
David, so you mean if I create a new class for the controller like a MyCustomViewModel and pass this class like var myCustomOne = new MyCustomViewModel(); myCustomOne.myArray = new int[] {1,2,3,4} return View(myCustomOne);I would be able to access that array in my view like: Model.myArray as int[] is that right?
ludicco
That's correct, though you may need to change the view definition for this to work. This will be easier to do if you copy the View markup you have, delete the view. Then right-click within the action method, select the Add View option, and make sure the Strongly typed option is checked and is set to your new ViewModel.
David Andres
+4  A: 

You need to cast in the View

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

Daniel Elliott
Thanks for that agileguy you're indeed very agile!Exactly what I wanted. Cheers
ludicco