4

顧客の詳細がいくつかあり、値を持つフィールドのみを表示したいと考えています。

たとえば、Telephone が null の場合は表示されません。

私は現在、ビューモデルに持っています

    public string FormattedTelephone
    {
        get { return string.IsNullOrEmpty(this.Telephone) ? " " : this.Telephone; }
    }

そして私の見解では

@Html.DisplayFor(model => model.FormattedTelephone)

これは正しく機能していますが、フィールドに値がある場合はフィールド名を表示したいと思います。

電話: 02890777654

ビューで使用する@Html.DisplayNameForと、フィールドが null の場合でもフィールド名が表示されます。

また、フィールド名を太字でスタイルしたいのですが、どこでスタイルを設定するか (ビューまたはビューモデル) が不明です。

4

4 に答える 4

5

太字のスタイルの場合、ビューでこのコードを使用できますが、もちろん、外部スタイルシートを使用するのが適切です。

<style type="text/css">
.telephone{
font-weight: bold;
}
</style>

ビューでnullのチェックを実行し、条件付きでデータを表示できます。

 @if (Model.FomattedTelephone != null)
    {
       <div class="telephone">
          @Html.DisplayFor(model => model.FormattedTelephone)</div>
    }
于 2012-09-25T19:14:57.543 に答える
1

スタイルの場合は、フィールド名の周りに配置できるスパンにクラスを追加します。

文字列がnullまたは空でない場合にのみ書き込む独自のHtmlHelperを作成できます。

または、次のようなDisplayTemplatesを追加することもできます 。DisplayFor()用のMVCRazorテンプレートを作成するにはどうすればよいですか。

かみそりのヘルパーの背景については、次の http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razorをお読みください。 aspx

そして、それらがApp_Codeフォルダーにある場合は、これに対する回答を読んでください。Razor 宣言型ビューからのMVC HtmlHelper拡張機能の使用これを使用 してデフォルトのヘルパーページを上書きする(そしてApp_Codeのヘルパークラスに継承する)ことをお勧めします。

public class WorkaroundHelperPage : HelperPage
    {
        // Workaround - exposes the MVC HtmlHelper instead of the normal helper
        public static new HtmlHelper Html
        {
            get { return ((WebViewPage)WebPageContext.Current.Page).Html; }
        }

        public static UrlHelper Url
        {
            get { return ((WebViewPage) WebPageContext.Current.Page).Url; }
        }
    }
于 2012-09-25T16:12:16.583 に答える
1

このためのヘルパーを次のように作成します。

using System.Web.Mvc.Html;
public static class HtmlHelpers
{
    public static MvcHtmlString LabelDisplayFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
    {
        StringBuilder html = new StringBuilder();
        string disp = helper.DisplayFor(expression).ToString();
        if (!string.IsNullOrWhiteSpace(disp))
        {
            html.AppendLine(helper.DisplayNameFor(expression).ToString());
            html.AppendLine(disp);
        }
        return MvcHtmlString.Create(html.ToString());
    }
}

これで、ビューにいるときに、これを簡単に実行できます (ビューまたは web.config に名前空間が含まれている場合)。

@Html.LabelDisplayFor(model => model.FormattedTelephone)

実際に行うことは、表示ヘルパーが空の文字列ではないかどうかを確認することだけです。空の文字列である場合は、LabelFor と DisplayFor を追加するだけで、そうでない場合は空の文字列を返します。

于 2012-09-25T19:31:53.233 に答える
1

私は通常、HtmlHelper の代わりに Display/Editor Templates を使用することを好みます。これは、まったく同じタスクを実行するために使用したテンプレートです。これは、ブートストラップ データ リスト用に設計されていますが、誰でも簡単に調整できます。

@if (Model == null)
{
    @ViewData.ModelMetadata.NullDisplayText
}
else if (ViewData.TemplateInfo.TemplateDepth > 1)
{
    @ViewData.ModelMetadata.SimpleDisplayText
}
else
{
    <dl class="dl-horizontal">
        @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm)))
        {
            if(MvcHtmlString.IsNullOrEmpty(Html.Display(prop.PropertyName)))
            {
                continue;
            }    

            if (prop.HideSurroundingHtml)
            {
                @Html.Display(prop.PropertyName)
            }
            else
            {
                <dt>@prop.GetDisplayName()</dt>
                <dd>@Html.Display(prop.PropertyName)</dd>
            }
        }
    </dl>
} 

キーラインは次のとおりです。

if(MvcHtmlString.IsNullOrEmpty(Html.Display(prop.PropertyName)))

オブジェクトテンプレートに基づいているため、使用するには、オブジェクトまたはモデル全体で使用する必要があります

@Html.DisplayForModel("TemplateName") 
于 2015-08-18T08:29:34.407 に答える