web-dev-qa-db-ja.com

通貨/お金のタイプのMVCでEditorFor()をどのように使用する必要がありますか?

私の見解では、私は次の電話をかけています。

_<%= Html.EditorFor(x => x.Cost) %>
_

コストを定義する次のコードを持つViewModelがあります。

_public decimal Cost { get; set; }
_

ただし、これにより、小数点以下4桁の小数点値が表示されます(例:0.0000)。この問題を解決しているように見えるDecimal.toString("G")[〜#〜] msdn [〜#〜] )を知っていますが、どこに適用するかわかりません。

1つの解決策は、部分ビュー「Currency.aspx」を作成することのようです。

_<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Decimal>" %>
<%= Html.TextBox(Model.ToString("g"), new { @class = "currency" }) %>
_

そして、私のViewModelの[UIHint("Currency")]

これはエレガントではないようです。この問題はMVCフレームワークまたはC#のどこかできちんと解決されていると思いますが、よりクリーンな解決策を知りません。

MVCで通貨値の編集を処理する適切な方法は何ですか?

18
Thomas Langston
[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal Cost { get; set; }

そしてあなたの見解では:

<%= Html.EditorFor(x => x.Cost) %>

それだけです。

おそらく、カスタムCSSクラスを適用することをお勧めします。あなたはこれを行うことができます:

<div class="currency">
    <%= Html.EditorFor(x => x.Cost) %>
</div>

そしてあなたのCSSに持っています:

.currency input {
    /** some CSS rules **/
}

または カスタムDataAnnotationsModelMetadataProviderを作成 これにより、次のことが可能になります。

[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
[HtmlProperties(CssClass = "currency")]
public decimal Cost { get; set; }

そしてあなたの見解では:

<%= Html.EditorFor(x => x.Cost) %>
41
Darin Dimitrov

EditorForテンプレートを使用している場合、これは適切な方法です。

「過度にエレガントでない」とはどういう意味ですか?

3
John Farrell