2011-10-11 162 views
2

在使用带有Razor视图引擎的三元组时遇到了一点麻烦。ASP.NET MVC剃刀:三元

我的模型有一个字符串属性。如果该字符串属性为空,我想在视图中渲染null。如果该属性不为空,我希望它使用前导和尾随'来呈现属性值。

我该怎么做?

更新:对不起,稍微改变了问题。

+0

您可以使用空合并opererator?像这样的:@ Model.MyString ?? “'null'” –

+0

我同意@Darin Dimitrov。 *三元,循环,C#和东西使视图很难看。* –

回答

11

你应该只能够使用三元运算符之类的标题提示:

@(string.IsNullOrEmpty(Model.Prop) ? "null" : "'" + Model.Prop + "'") 
+3

完美!我使用'{}'而不是'()'! –

7

假设你有一个名为TestFirstLast性质的实体:

public class Test { 

    public string First { get; set; } 

    public string Last { get; set; } 
} 

您可以使用DisplayFormat.DataFormatStringDisplayFormat.NullDisplayText以达到您的目的:

public class Test { 

    [Display(Name = "First Name")] 
    [DisplayFormat(DataFormatString = "'{0}'", NullDisplayText = "'null'")] 
    public string First { get; set; } 

    [Display(Name = "Last Name")] 
    [DisplayFormat(DataFormatString = "'{0}'", NullDisplayText = "'null'")] 
    public string Last { get; set; } 
} 

,并考虑:

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

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

我改变了答案过于:

[DisplayFormat(DataFormatString = "'{0}'", NullDisplayText = "null")] 
4

三元,循环,C#之类的东西,使意见难看。

这就是查看车型特别设计来做到:

public class MyViewModel 
{ 
    [DisplayFormat(NullDisplayText = "null", DataFormatString = "'{0}'"] 
    public string MyProperty { get; set; } 
} 

,然后在你的强类型的观点只是:

@model MyViewModel 
... 
@Html.DisplayFor(x => x.MyProperty) 
+0

你是对的。我同意你 –