5

ページに表示したい整数値がある場合、それをいくつかの方法で行うことができます。

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

しかし、それを値IF UserId!= 0の表示に変換する最良の方法は何ですか。ただし、UserId == 0の場合は、空の文字列を表示します。Razor構文でそれを正しく行う方法はありますか、それともコードに向かう必要がありますか?

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>

if1つの条件でこれができると思います

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

(あなたが言ったように)冗長性を持たずにコンテンツをレンダリングするには<span>@:-MVC3 Razor:コードブロック内にhtmlを表示し、@:を使用してコンテンツを表示します

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

}を次の行に移動したことに注意してください。ASP.NetMVCはそれを受け入れませんでした

<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")

クラスのUserIdにUIHint属性を設定することもできます[UIHint("UserId")] 。その場合、テンプレート名を指定する必要はありません。

于 2012-11-09T15:30:44.060 に答える
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 に答える
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 に答える
0

私の場合、これは簡単だと思いました。

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

これがあなたが探していたワハットであるかどうかはわかりませんが、私にとってはうまくいきました。

于 2017-02-20T15:25:07.590 に答える