2

私は現在持っています:

@Html.EditorFor(model => model.PurchasePrice)

これを小数で区切られた2つの別々のフィールドに分割したいと思います(明らかに価格入力用)。ただし、基本的なテキストボックスを使用してこれを行うと、ASP.NETの検証を利用する機能が失われます。

Razorで、または属性を使用してこれを行う方法はありますか?これにより、エンティティモデルに対してJSとサーバー側の検証を維持できますか?

ビューモデル内に独自の関数を作成することで、他の場所で簡単にそれを行うことができますが、MVC3は初めてであり、それが最適なルートであるか、より簡単な方法があるかは完全にはわかりません。

編集:

これは私が考えている方向の一種であり、これがどのように機能するかを完全には理解していません。

2つのフィールドを設定しました。1つはとして、1つはppDollarとしてppCentsです。私が持っているコントローラーには:

modelname.PurchasePrice = Request["ppDollar"] + Request["ppCent"];

しかし、私はそれを見て、それがうまくいかないことを知ることができます。したがって、問題は、ユーザー入力をエンティティモデルに対してどのように検証するか、および組み込みの機能をどのように活用できるかということだと思います。

4

1 に答える 1

1

によってレンダリングされる特定のタイプのカスタム エディタを作成できますEditorFor。これを行う方法の例をオンラインでたくさん見つけることができます。そのほとんどはカスタムDateTimeエディターに焦点を当てていますが、同じ考え方がどのタイプにも当てはまります。クイック検索からのほんの一例:

http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/

要するに、プロセスは次のとおりです。

  • 部分ビュー テンプレートを作成しViews\Shared\EditorTemplates、タイプと同じ名前 (例: Decimal.cshtml) でフォルダに配置します。
  • ビューは、表示するタイプをモデルとして使用する必要があります。@inherits System.Web.Mvc.WebViewPage<System.Decimal>
  • フィールドの命名規則などを使用して、必要なものをビューに表示します。
  • EditorForプロパティを介してテンプレートで参照される、適切なオーバーロードを介して HTML 属性を渡すこともできViewData.ModelMetadata.AdditionalValuesます。

1 つの注意点: エディタ テンプレートを定義すると、 へのすべての呼び出しに使用されますEditorForEditorTemplatesフォルダーを共有フォルダーではなく、適切なビュー サブフォルダーに移動することで、それらを特定のコントローラーにスコープできます。

于 2012-07-08T22:55:54.863 に答える