2011-01-10 3 views
1

저는 MVC, ASP.net 및 서버 측 스크립팅에 대해 처음 보았습니다.ViewData에 대한 대안?

저는 www.asp.net/mvc에서 템플릿을 설명하는 튜토리얼 비디오를 보았습니다. 그는 컨트롤러가 뷰 데이터를 사용하여 뷰에 정보를 전송한다고 설명했습니다. 내가 틀렸다면

저를 수정,하지만 난이 다음과 같이 사용 믿습니다

CONTROLLER : ViewData["PropertyName"] = value;

보기 : <p><%= ViewData["PropertyName"] %></p>

이 올바른 사용인가?

ViewData를 사용하는 대신 더 좋은 방법은 무엇이며, 나쁜 점은 무엇입니까?

+0

게시물 당 하나의 질문에만 집중해야합니다. 원본과 관련이 없으므로 "Html.Encode() 사용 방법"질문을 별도의 질문으로 이동합니다. –

답변

3

ViewData 컬렉션의 사용을 권장할만한 상황이 있습니다.

대부분의 경우 각보기에 대해 View ModelsStrongly Typed Views을 사용합니다.

1

ViewData를 사용하는 대신 새로운 Model 개체를 만들고이를 모델에 강력하게 입력 된 View에 전달하는 것이 더 좋습니다.

모델 (모델/MyModels.cs)

public class MyModel 
{ 
    public string PropertyName { get; set; } 
} 

보기 (보기/내/Index.aspx)

<%@ Page Language="C#" Inherits="ViewPage<MyModel>" %> 
<p><%=Model.PropertyName %></p> 

컨트롤러 (컨트롤러/MyController.cs)

public class MyController : Controller 
{ 
    public ActionResult Index() 
    { 
     MyModel model = new MyModel() 
     { 
      PropertyName = "My Property Name" 
     }; 

     return View(model); 
    } 
} 

Html.Encode는 다음과 같이 사용할 수 있습니다

<%=Html.Encode(someObject) %> 

하거나 당신은 using ASP.NET 4.0

<%: someObject %> 
+0

'<% = Model.PropertyName %>'대신에'<% = model.PropertyName %>'을 사용했다고 가정합니다. – DarkLightA

+0

아니, 나는'모델' – hunter

0

을 ViewData가 확실하지 않은 완전한 임의의 데이터에 대한 좋은 있다면 무엇을 필요가있을거야.

잘 정의 된보기를 구성하려면 강력하게 형식화 된보기를 사용해야합니다. 이러한 뷰를 통해 특정 비즈니스 객체 (또는보다 유용하게는 ViewModel)에서 상속하여 데이터를 표시 할 수 있습니다. 이 경우 ViewData [ "SomeProperty"] 대신 강력하게 형식화 된 Model 멤버 인 Model.SomeProperty에 액세스 할 수 있습니다.

또한 Html.Encode는 사용자가 입력 한 데이터를 반복하는 데이터 요소 주위에 놓아야합니다. HTML 삽입을 방지하기위한 것입니다.

1

저스틴 (Justin)은 ViewData 사용법과 뷰 모델 (View Model)을 사용하는 것과 관련하여 정확합니다 (이것은 아마도 사용자의 요구에 가장 적합한 솔루션입니다).

다른 옵션이지만 미끄러운 경향이 있지만 대안을 요청했습니다.