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

时间:2012-09-25 22:27:30

标签: asp.net-mvc razor

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

<span>@Html.DisplayFor(modelItem => item.UserId)</span>
<span>@item.UserId</span>

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

7 个答案:

答案 0 :(得分:7)

为int:

创建扩展方法
public static class IntExtensions
{
    public static string EmptyIfZero(this int value)
    {
        if(value == 0)
            return string.Empty;

        return value.ToString();
    }
}

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

<span>@item.UserId.EmptyIfZero()</span>

答案 1 :(得分:5)

<span>@((item.UserID == 0) ? "" : @item.UserID.ToString())</span>

OR

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

我认为你可以用一个if条件

来做到这一点
<span>@if(item.UserID != 0) { @Html.DisplayFor(m => item.UserID); } //the browser would render empty string by itself

要在不放置冗余(如您所说)<span>的情况下呈现内容,请使用@: - MVC3 Razor: Displaying html within code blocks@: for displaying content

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

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

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

答案 2 :(得分:4)

你可以这样做:

<span>@(item.UserId != 0 ? item.UserId.ToString() : string.Empty)</span>

答案 3 :(得分:2)

我认为最好和最可重复使用的是创建模板。

所以你创建了例如UserId.vbhtml中的~/Views/Shared/DisplayTemplates 具有以下内容:

在模板中构建所有逻辑,这就像是(我正在打字而不检查,我通常在VB中编码,因此可能会出错):

@model int
@((Model == 0) ? "" : @Model)

然后在您使用的代码中: @Html.DisplayFor(modelItem => item.UserId, "UserId")

你也可以在你的班级中将UIHint属性放在UserId上:[UIHint("UserId")] 然后您不需要提供模板名称。

答案 4 :(得分:0)

当模型值 0 时,这是显示整数空白的另一种方法。

型号:

[Display(Name = "User Id")]
public int UserId { get; set; }

查看:

<span>
    @Html.DisplayNameFor(m => m.UserId)
</span>
<span>
    @Html.TextBoxFor(m => m.UserId, new { @Value = (Model.UserId > 0 ? Model.UserId.ToString() : string.Empty) })
</span>

答案 5 :(得分:0)

就我而言,我发现这更容易:

$(document).ready(function () {
        $("#myField").val("");
}

不确定这是否是你想要的,但对我来说工作正常。

答案 6 :(得分:0)

我做了一些更全面的解决方案,显示空白: - 整数:0 - 十进制:0.0 - 字符串:“0x0”或“0x0x0”

扩展类:

public static class DataTypesExtension
{
    static string[] Keywords = { "0", "0.0", "0.00", "0.000", "0.0000", "0,0", "0,00", "0,000", "0,0000", "0x0", "0x0x0" };
    public static string BlankIfZero(this object n)
    {
        string ret = string.Empty;

        if (n == null)
            return ret;

        string sn = n.ToString().Replace(" ", "");


        if (!DataTypesExtension.Keywords.Contains(sn))
            ret = n.ToString();

        return ret;
    }
}

显示模板:

@model object

@using MyProject.Extensions;

@{
    string val = Model.BlankIfZero();
    @val;        
}

在View Model中:

[UIHint("BlankIfZero")]
public int? MyIntProperty { get; set; }

[UIHint("BlankIfZero")]
public decimal? MyDecimalProperty { get; set; }

[UIHint("BlankIfZero")]
public string MyStringProperty { get; set; }