2009-09-10 5 views
8

컨트롤러의 배열을 ASP.NET MVC 프레임 워크의보기로 전달하는 쉬운 방법을 찾으려고 여기에서 자신을 고심하고 있습니다. ASP.NET MVC -보기에 배열을 전달하는 방법?

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

그래서 내보기에 내가 을 ViewData [ "passedArray"]을 그냥 전화를했을 그 위에 루프를 실행

그래서 내 컨트롤러에서 내가 좋아하는 뭔가를 할 것입니다.

그러나 분명히 을 ViewData아마 때문에 배열 데이터 형식의 선언, 선택 System.String으로보기에 의해 수신되는,하지만 불행히도 나는 수백만을 생성하지 않고 적절하고 간단하게 전달하는 방법을 모른다 코드 줄 수

나를 도울 수 있다면 환상적 일 것입니다. [] 문자열로보기 내을 ViewData [ "passedArray을"] 캐스트 사전

답변

12

당신은보기에 캐스팅 할 필요가

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

그 agileguy에 감사드립니다. 당신은 정말로 매우 민첩합니다! 정확히 내가 원했던 것. 건배 – zanona

8

이 작동합니다에서

감사합니다. 또는이 배열을 멤버로 포함하는 ViewModel 클래스를 만들고 해당 ViewModel을보기의 강력한 형식의 버전으로 전달합니다.

+0

덕분에 많은 다윗이 나는 완벽, 주조를 사용했다. 그러나 변수를 관리하기위한 특정 뷰 모델을 만드는 아이디어가 마음에 든다. 나는 그것에 대해 더 잘 알리려고 노력할 것이다. 다시 한번 감사드립니다. – zanona

+0

ViewModel을 선택하는 데는 몇 가지 좋은 이유가 있습니다. (1) 캐스트가 필요하면 런타임 오류가 발생합니다. (2) ViewModel을 작성하면 미래에보기의 유형을 변경하지 않고도 필요에 따라 기능을 추가 할 수있는 유연성이 제공됩니다. (3) ViewData [ "key"] 코드가보기에 산재되어 있지 않으면 코드가 약간 더 읽기 쉽습니다. –

+0

David, 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); 
        } 
    
  • 보기

당신이 말한대로3210
@model List<string> 
@foreach (var item in Model) { 
     @Html.Partial("~/Views/Shared/Fruits/_myFruits.cshtml", item); 
} 
  • PatialView 즉 _myFruits.cshtml는
@model string 
<li>@Model</li> 
관련 문제