Question

Je suis à la recherche dans l'écriture des extensions MVC personnalisés et le premier que je tente d'aborder est un FormattedTextBox pour gérer les choses comme la monnaie, les dates et les heures. Je le rendu de celui-ci fonctionne parfaitement, le formatage, en travaillant avec des types forts et ce que tout d'or. Cependant, le problème que je suis maintenant en cours d'exécution dans assainit les choses lorsque les messages mis en forme de page les données de retour.

Prenons, par exemple, un format monétaire. Utilisons USD pour ces exemples. Lorsqu'un objet a une propriété comme une décimale, la valeur serait 79.95. Votre point de vue de modifier serait quelque chose comme:

<%= Html.FormattedTextBox(model => Model.Person.HourlyWage, "{0:C}") %>

est bien et bon pour la demande GET, mais sur le POST, la valeur va être $79.95, qui lorsque vous attribuez à cette décimale, se malheureux très rapidement et finit par pousser un 0 là-dedans.

Alors, ma question est, comment puis-je obtenir le code de travail quelque part pour travailler avec cette valeur avant que le framework MVC va et se fait fourrer nouveau dans mon ViewModel? Je préfère cela soit fait côté serveur que côté client.

Merci !!

Était-ce utile?

La solution

Une solution serait d'écrire un modèle de liaison qui sera en mesure de convertir $79.95 de se lier à un champ décimal dans votre modèle. Une autre solution est de le faire sur le côté client. Dans un gestionnaire de form.submit jQuery vous pouvez modifier les valeurs des champs de saisie affichés.

Autres conseils

Vous pouvez utiliser Modèle sur mesure Liants pour fourrer les données affichées dans un objet.

[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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top