.net mvc仅当视图中有值时才在视图中显示

时间:2012-09-25 16:09:52

标签: asp.net-mvc

我有一些客户详细信息,我只想显示有价值的字段。

例如,如果Telephone为null,则不显示它。

我目前在我的视图模型中

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

在我看来

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

这是正常的,但是,如果字段有值,我想显示字段名称。

电话: 02890777654

如果我在视图中使用@Html.DisplayNameFor,即使该字段为空,也会显示字段名称。

我还想用粗体设置字段名称的样式,并且不确定我在哪里设置样式 - 视图或视图模型。

4 个答案:

答案 0 :(得分:5)

对于粗体样式,您可以在视图中使用这段代码,但当然使用外部样式表是合适的。

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

您可以在视图中检查null并有条件地显示数据:

 @if (Model.FomattedTelephone != null)
    {
       <div class="telephone">
          @Html.DisplayFor(model => model.FormattedTelephone)</div>
    }

答案 1 :(得分:1)

对于样式,可以为字段名称添加一个类。

您可以创建自己的HtmlHelper,只有在字符串不为空或空时才会写入。

或者你可以像这里一样添加一个DisplayTemplates: How do I create a MVC Razor template for DisplayFor()

有关剃刀中助手的更多背景知识,请阅读以下内容 http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

如果他们在您的App_Code文件夹中,请阅读此答案 Using MVC HtmlHelper extensions from Razor declarative views 您可能希望使用此方法覆盖默认帮助程序页面(并在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; }
        }
    }

答案 2 :(得分: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());
    }
}

现在,当您在View中时,您可以简单地执行此操作(假设您在视图或web.config中包含命名空间):

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

所有它确实检查你的显示助手是不是一个空字符串,如果是,它只会附加你的LabelFor和DisplayFor,如果不是,它将返回一个空字符串。

答案 3 :(得分:1)

我通常更喜欢使用显示/编辑器模板而不是HtmlHelper。这是我用来执行完全相同任务的模板,它是为bootstrap数据列表设计的,但任何人都可以轻松调整它。

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

关键是:

@Html.DisplayForModel("TemplateName") 

它基于对象模板,因此要使用它,您需要在对象或整个模型上使用它,如

http://localhost:8087/JasperReportsIntegration/report?_repName=report2&_repFormat=pdf&_dataSource=test&_outFilename=&_repLocale=de_DE&_repEncoding=UTF-8&p_id=30