カスタムMVC拡張機能を使用して投稿データを変更しますか?
-
23-09-2019 - |
質問
そこで、いくつかのカスタムMVC拡張機能の作成を検討しています。最初に取り組んでいるのは、通貨、日付、時間などを処理するフォーマットテキストボックスです。私はそれのレンダリングが完全に機能し、それをフォーマットし、強いタイプとすべての黄金で作業しています。ただし、私が現在遭遇している問題は、ページがデータを戻すときにフォーマットされたものをクリーンアップすることです。
たとえば、通貨形式を考えてみましょう。これらの例にはUSDを使用しましょう。オブジェクトが小数点としてプロパティを持っている場合、値は 79.95
. 。編集ビューは次のようなものになります。
<%= Html.FormattedTextBox(model => Model.Person.HourlyWage, "{0:C}") %>
これはすべてGetリクエストに適していますが、投稿すると、値は $79.95
, 、あなたがその小数に割り当てると、非常に迅速に不幸になり、最終的に押し込むことになります 0
そこで。
それで、私の質問は、MVCフレームワークが進み、それを私のviewmodelに押し戻す前に、コードをどこかでその価値で動作させるようにするにはどうすればよいですか?私はこれがクライアント側よりもサーバー側をやりたいと思っています。
ありがとう!!
解決
1つの解決策は、aを書くことです カスタムモデルバインダー バインドを変換できます $79.95
モデルの小数フィールドへ。別の解決策は、クライアント側でそれを行うことです。 jQueryで form.submit
ハンドラー投稿する入力フィールドの値を変更できます。
他のヒント
使用できます カスタムモデルバインダー 投稿されたデータをオブジェクトに押し込む。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(
[ModelBinder(typeof(YourModelBinderAttribute))]YourClass obj)
{
// your code here
return View();
}
public class MessageModelBinderAttribute : IModelBinder
{
#region IModelBinder Members
public object BindModel(
ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
YourClass obj = new YourClass();
ValueProviderResult result;
if (bindingContext.ValueProvider.TryGetValue(
"YourPostedInputName", out result))
{
obj.Price = result.AttemptedValue;
}
return message;
}
#endregion
}
所属していません StackOverflow