2009-07-09 8 views
1

私は現在、ASP.NET WebFormsアプリケーションをASP.NET MVCに移植しています。Labelを条件付きで表示するのに相当するASP.NET MVCとは何ですか?

ページの1つに、コードビハインド内の変数に基づいて条件付きで表示されるASP.NET Labelコントロールがあります。したがって、効果のあるもの

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

ここで、ShowLabelはコードビハインド内のブール値です。ラベルの内容は実行時に生成され、毎回違うでしょう。

ASP.NETでもこれを行うには良い方法がありますが、ASP.NET MVCでこれを行うにはどうすればよいでしょうか? ASP.NET Labelオブジェクトの仕組みと同じように、ASP.NET MVCでダイナミックテキストをレンダリングすることはどうでしょうか?

+0

私はあなたのWebフォームを意味すると思います。 –

答えて

4

非常に単純なビューでない限り、私はThunderdome principleのビューごとに1つのViewModelクラスを持つと考えています。 、のような何かを、あなたのコントローラで

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); 
} 

は、だから私は、次のようなのViewModelクラスを持っているでしょう。その後

、あなたのビューで単にような何か:

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

MVCの主なアイデアは、表示したい文字列を渡すことはありませんが、関連するオブジェクトをViewに渡す必要があり、Viewはそのラベルを表示するかどうかを決定します(これはSimucalのサンプルのような単純なifを使用しています)。

ので、代わりにラベルが記事にコメントするユーザーのためのプロンプトを表示するようになります場合は、1つは、例えば

if (Model.Comments == 0) { 

を行うだろう

if (Model.labelIsVisible) { 

を行います。そのような

0

がであなたの要素を取り、非表示に設定()関数:

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


$("#label").hide();` 
関連する問題