ASP.NET MVC和Razor在0时显示整数或空白

slo*_*ife 4 asp.net-mvc razor

如果我有一个想要在页面上显示的整数值,我可以通过多种方式实现:

<span>@Html.DisplayFor(modelItem => item.UserId)</span>
<span>@item.UserId</span>
Run Code Online (Sandbox Code Playgroud)

但是将其转换为显示值IF UserId!= 0的最佳方法是什么.但是如果UserId == 0,则显示一个空字符串.有没有办法在Razor语法中做到这一点,还是我需要前往代码?

Seb*_*eth 7

为int创建扩展方法:

public static class IntExtensions
{
    public static string EmptyIfZero(this int value)
    {
        if(value == 0)
            return string.Empty;

        return value.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后在你的Razor视图中,执行:

<span>@item.UserId.EmptyIfZero()</span>
Run Code Online (Sandbox Code Playgroud)


cod*_*biz 6

<span>@((item.UserID == 0) ? "" : @item.UserID.ToString())</span>
Run Code Online (Sandbox Code Playgroud)

要么

<span>@if(item.UserID == 0) { <span></span> }
   else { @Html.DisplayFor(m => item.UserID); }
</span>
Run Code Online (Sandbox Code Playgroud)

我想你可以用一个if条件做到这一点

<span>@if(item.UserID != 0) { @Html.DisplayFor(m => item.UserID); } //the browser would render empty string by itself
Run Code Online (Sandbox Code Playgroud)

要在不放置冗余的情况下呈现内容(如您所述)<span>,请使用@:- MVC3 Razor:在代码块中显示html@:用于显示内容

<span>
   @if(item.UserID == 0) {  } //this is redundant too
   else { @Html.DisplayFor(m => item.UserID); 
   }
</span>
Run Code Online (Sandbox Code Playgroud)

请注意,我已将其移至}下一行.ASP.Net MVC不接受它

<span>
   @if(item.UserID == 0) { @:Some content with no html tag wrapper 
   }
   else { @Html.DisplayFor(m => item.UserID); 
   }
</span>
Run Code Online (Sandbox Code Playgroud)