ページに表示したい整数値がある場合、それをいくつかの方法で行うことができます。
<span>@Html.DisplayFor(modelItem => item.UserId)</span>
<span>@item.UserId</span>
しかし、それを値IF UserId!= 0の表示に変換する最良の方法は何ですか。ただし、UserId == 0の場合は、空の文字列を表示します。Razor構文でそれを正しく行う方法はありますか、それともコードに向かう必要がありますか?
ページに表示したい整数値がある場合、それをいくつかの方法で行うことができます。
<span>@Html.DisplayFor(modelItem => item.UserId)</span>
<span>@item.UserId</span>
しかし、それを値IF UserId!= 0の表示に変換する最良の方法は何ですか。ただし、UserId == 0の場合は、空の文字列を表示します。Razor構文でそれを正しく行う方法はありますか、それともコードに向かう必要がありますか?
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>
<span>@((item.UserID == 0) ? "" : @item.UserID.ToString())</span>
また
<span>@if(item.UserID == 0) { <span></span> }
else { @Html.DisplayFor(m => item.UserID); }
</span>
if
1つの条件でこれができると思います
<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>
あなたはこれを行うことができます:
<span>@(item.UserId != 0 ? item.UserId.ToString() : string.Empty)</span>
テンプレートを作成するのが最善で最も再利用可能なものだと思います。
したがって、たとえば
次のコンテンツを使用UserId.vbhtml
して作成します。~/Views/Shared/DisplayTemplates
テンプレートでは、すべてのロジックを構築します。これは次のようになります(チェックせずに入力していて、通常はVBでコーディングしているため、間違いがある可能性があります)。
@model int
@((Model == 0) ? "" : @Model)
そして、使用するコードでは次のようになります。
@Html.DisplayFor(modelItem => item.UserId, "UserId")
クラスのUserIdにUIHint属性を設定することもできます[UIHint("UserId")]
。その場合、テンプレート名を指定する必要はありません。
これは、モデル値が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>
もう少しグローバルな解決策を実行しました。次の場合は空白を表示します。-整数: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; }
私の場合、これは簡単だと思いました。
$(document).ready(function () {
$("#myField").val("");
}
これがあなたが探していたワハットであるかどうかはわかりませんが、私にとってはうまくいきました。