1

モデルに次のフィールドがあります。

public Decimal AnnualSalary { get; set; }

私の見解では次のように表示されます:

@Html.EditorFor(model => model.SelectedPerson.AnnualSalary)

これにより、小数点以下2桁のデータ形式が得られます。カンマ千単位の区切り文字も必要です。そこで、Shared|にDecimal.cshtmlという名前のファイルを作成しました。以下を含むEditorTemplatesフォルダー:

@model Decimal
@Html.TextBox("", Model.ToString("#,##0.00"))

これにより、既存のデータのエディターで必要な表示が得られます。ただし、変更したデータを保存しようとすると失敗します。10進エディターテンプレートを削除すると、データは正常に保存されます。

また、新しいエディターテンプレートがないと、このテキストボックスにカンマを入力してもクライアント側の検証エラーは発生しませんが、データは保存されません。

クライアント側の検証が千単位の区切り文字を受け入れて非常に満足しているようですが、EFコードが最初にデータを保存しようとしたときのサーバー側の何かは、千単位の区切り文字を好みません。

これはかなり一般的な要件のようですが、どこでも決定的な答えを見つけるのに苦労しています。

4

3 に答える 3

1

SelectedPersonViewModelを作成することをお勧めします。ここで、AnnualSalaryは文字列であり、検証のために正しい正規表現を使用してその上にRegexAttributeを配置します。

提供された文字列を内部で解析して10進変数に保存してから、モデルに戻すこともできます(投稿後のアクションで)

編集:この質問への回答で説明されているようなものである可能性があります:Asp.NetMVCの千の区切り文字を使用した10進値

于 2012-03-19T12:08:26.167 に答える
0

モデルは、EFの場合と同じように、10進値が有効であることを期待しています。非表示フィールドに小数値を追加してから、年俸の値がコンマでフォーマットされたテキストボックスを表示できます。次に、jqueryを使用すると、テキストボックスが更新されたときに非表示フィールドの値をバインドできます。このようにして、モデルが期待している10進値を渡します。

于 2012-03-19T12:11:16.187 に答える
0

上記のMichalB.によって提供されたリンクのおかげで、私は最終的にPhilHaackによって提供されたこのソリューションへのリンクを見つけました。

私がたどったリンクで言及された他の多くの解決策を試しましたが、これは私が見つけた最も包括的で一般的な解決策です。

于 2012-03-19T21:37:11.740 に答える