1

現在、ASP.NETWebFormsアプリケーションをASP.NETMVCに移植しています。

ページの1つに、コードビハインドの変数に基づいて条件付きで表示されるASP.NETラベルコントロールがあります。だから、何かの効果

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

ここで、ShowLabelは、分離コード内のブール値です。ラベルの内容は実行時に生成され、毎回ほとんど異なります。

ASP.NETでもこれを行うためのより良い方法がありますが、ASP.NETMVCでこれを行うための最良の方法は何でしょうか。ASP.NET Labelオブジェクトの動作と同様の方法で、ASP.NETMVCで動的テキストをレンダリングする方法を教えてください。

4

3 に答える 3

4

私は、ビューごとに1つのViewModelクラスを持つというThunderdomeの原則を信じています(非常に単純なビューでない限り)。

したがって、次のような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;
    }
}

コントローラで、次のような操作を行います。

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

ここで、Indexは、IndexViewModel型の強く型付けされたビューです。

次に、あなたの見解では、単に次のようなことをします。

<% if (Model.labelIsVisible) { %>
 <%= Model.labelText %>
<% } %>
于 2009-07-09T15:51:38.447 に答える
1

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

だから、する代わりに

if (Model.labelIsVisible) {

1つはします

if (Model.Comments == 0) {

たとえば、ラベルがユーザーに記事にコメントするためのプロンプトを表示する場合です。

于 2009-07-09T15:58:53.313 に答える
0

要素を取り込んで、次のようにhide()関数を設定します。

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


$("#label").hide();`
于 2012-03-29T14:10:25.610 に答える