2009-07-09 3 views
1

저는 현재 ASP.NET WebForms 응용 프로그램을 ASP.NET MVC로 이식하고 있습니다.레이블을 조건부로 표시하는 것과 동일한 ASP.NET MVC는 무엇입니까?

페이지 중 하나에는 코드 숨김의 변수를 기반으로 조건부로 표시되는 ASP.NET Label 컨트롤이 있습니다. 그래서 효과의 대상

<asp:Label runat="server" Visible="<%# ShowLabel%>"> 
... 
</asp:Label> 

여기서 ShowLabel은 코드 숨김의 부울 값입니다. 레이블의 내용은 런타임에 생성되며 매번 다를 것입니다.

ASP.NET에서이 작업을 수행하는 더 좋은 방법이 있지만 ASP.NET MVC에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? ASP.NET Label 객체의 작동 방식과 비슷한 방법으로 ASP.NET MVC에서 동적 텍스트를 렌더링하는 방법에 대해서도 어떻게 생각합니까?

+0

당신이 웹폼을 의미 생각합니다. –

답변

4

저는 매우 간단한보기가 아닌 한 각보기에 대해 하나의 ViewModel 클래스를 가지고 있다고 믿습니다 (Thunderdome principle). 같은 일을 할, 컨트롤러에서

public class IndexViewModel 
{ 
    public bool labelIsVisible { get; set; } 
    public String labelText { get; set; } 

    public IndexViewModel(bool labelIsVisible, String labelText) 
    { 
     this.labelIsVisible = labelIsVisible; 
     this.labelText = labelText; 
    } 
} 

지수 형 IndexViewModel의 강력한 형식의보기이다

public ActionResult Index() 
{ 
    // Set label to be visible in the ViewModel instance 
    IndexViewModel viewData = new IndexViewData(true, "Simucal rocks!"); 
    return View(viewData); 
} 

:

그래서 나는 다음과 같은 뷰 모델 클래스를 가질 것이다.

<% if (Model.labelIsVisible) { %> 
<%= Model.labelText %> 
<% } %> 
1

MVC의 주요 아이디어는 표시 할 문자열을 전달하는 아닙니다; 같은

그런 다음보기에서 단순히 뭔가를 할 View에 관련 객체를 전달해야하며 View는 해당 레이블을 표시할지 여부를 결정합니다 (Simucal의 샘플과 같이 간단한 if를 사용하고 있음). 라벨은 사용자가 기사에 언급에 대한 프롬프트를 표시하는 것입니다 경우

그래서, 대신

if (Model.labelIsVisible) { 

하나를 수행의 예를 들어

if (Model.Comments == 0) { 

할 것입니다. 그런

0

이 당신의 요소를 가지고 숨기기 설정() 함수 :

<div id="label"> 
    @Html.Label("myLabel", "text") 
</div> 


$("#label").hide();`