2009-11-26 4 views
0

대신에 ViewDataDictionary를 작성이 이상 ASP.NET MVC 프레임 워크

public ActionResult Index(string baz) 
{ 
    // Do stuff... 

    ViewData["foo"] = _repository.GetFoos().ToList(); 
    ViewData["bar"] = new string[] { "blah" }; 
    ViewData["baz"] = baz; 
    return View(); 
} 

난을 ViewData 좀 더 구조화하여 오타 오류를 줄일 수있는 방법에 대해 생각했다, (아직) 다른 ViewModel 클래스를 추가하지 않아도됩니다. 나는 다음을 생각해 냈다 :

public ActionResult Index() 
{ 
    var foo = _repository.GetFoos().ToList(); 
    var bar = new string[] { "blah" }; 
    var baz = null; 

    ViewData = new ViewDataDictionary { 
     {"foo", foo}, 
     {"bar", bar}, 
     {"baz", baz } 
    }; 

    return View(); 
} 

public ActionResult Index(string baz) 
{ 
    var foo = _repository.GetFoos().ToList(); 
    var bar = new string[] { "blah" }; 
    var baz = null; 

    // Do Stuff... 

    ViewData = new ViewDataDictionary { 
     {"foo", foo}, 
     {"bar", bar}, 
     {"baz", baz} 
    }; 

    return View(); 
} 

그런 ViewData를 덮어 쓰는 것은 나쁜 생각일까요? 나는 이것이 RenderPartials에 문제를 일으키지 않을 것이라고 확신하지만 뷰에서 RenderAction을 더 이상 호출 할 수 없습니까?

+1

여기서 제안한 것보다보기 모델 방식을 사용합니다. 뷰 모델은 수정해야 할 때 배당금을 지불하는 추상화 계층을 제공합니다. 또한 Intellisense를 제공하고 더 자체적으로 문서화하는 View를 강력하게 입력 할 수 있습니다. 그 외에도 RenderAction을 계속 호출 할 수 있다고 생각합니다. RenderAction 호출에 전달할 데이터/데이터의 사례 일뿐입니다. – ChrisP

답변

1

ViewData를 덮어 쓰는 것이 좋지 않습니까?

아니요. 좋습니다. 그러나 이것은 일반적이지 않습니다.

나는이 RenderPartials에 문제가 발생하지 것이다 확실 해요,하지만 난 더 이상 는 보기에서 RenderAction를 호출 할 수 있을까요?

모든 사항을 확인해야합니다.

그러나 ViewData를 덮어 쓰지 않고도 코드에 llok을 넣을 수 있습니다.

은 오타를 제거하지 않았습니다. r. 두 경우 모두과 같은 숫자의 이 있습니다.

그래서 여전히 에 ViewModel을 추가하는 것이 좋습니다. 간단히하기 위해 컨트롤러 클래스 내에 ViewModel을 정의하면 모든 것을 한 곳에서 볼 수 있습니다.

+0

흠, 저에게 또 다른 (아마도 미친) 아이디어를줍니다. 컨트롤러를 모델로 설정하고 뷰에서 공용 인스턴스 변수를 사용할 수 있습니다. 어느 것이 레일과 매우 흡사합니다. –

+0

사실, 나는 돌아 오는 길 View (this) 느낌이 정말 마음에 드네. –

+0

흠, 그건 또 다른 옵션입니다. 나는 그렇게하는 것이 너무 나쁘지 않다고 생각한다. 그러나 그것은 SRP를 위반합니다. –

관련 문제