5

If I have an integer value that I want to display on a page, I can do that a number of ways:

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

But what is the best way to convert that to displaying the value IF UserId != 0. But if UserId == 0, display an empty string. Is there a way to do it right in Razor syntax or do I need to head to code?

4

7 回答 7

10

为 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>
于 2012-09-27T07:46:42.913 回答
7
<span>@((item.UserID == 0) ? "" : @item.UserID.ToString())</span>

或者

<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@: 用于显示内容

<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>
于 2012-09-25T23:21:43.513 回答
4

你可以这样做:

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

于 2012-09-25T22:33:18.097 回答
2

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

UserId.vbhtml因此,您~/Views/Shared/DisplayTemplates 使用以下内容创建例如:

在模板中构建所有逻辑,类似于(我在没有检查的情况下打字,我通常在 VB 中编码,所以可能会出现错误):

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

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

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

于 2012-11-09T15:30:44.060 回答
1

我做了一些更全局的解决方案,显示空白: - 整数: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;        
}

在视图模型中:

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

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

[UIHint("BlankIfZero")]
public string MyStringProperty { get; set; }
于 2017-11-10T13:52:33.867 回答
1

这是当模型值为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>
于 2016-12-09T07:56:00.817 回答
0

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

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

不确定这是否是您正在寻找的东西,但对我来说效果很好。

于 2017-02-20T15:25:07.590 回答