Domanda

Quindi non vedo a scrivere alcune estensioni MVC personalizzati e il primo che sto cercando di affrontare è un FormattedTextBox di gestire le cose, come valuta, date e orari. Ho il rendering di esso perfettamente funzionante, la formattazione, lavorando con i tipi forti e tutto tutto d'oro. Tuttavia, il problema ora sto correndo in sta pulendo la roba formattato quando la pagina i dati indietro.

Prendete per esempio, un formato di valuta. Usiamo USD per questi esempi. Quando un oggetto ha una proprietà come decimale, il valore verrebbe 79.95. La vostra vista edit sarebbe qualcosa di simile:

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

Questa è cosa buona e giusta per la richiesta GET, ma su di POST, il valore sta per essere $79.95, che quando si assegnano a quella decimale, diventa infelice molto rapidamente e finisce spingendo un 0 in là.

Quindi la mia domanda è, come faccio a codice funzionante da qualche parte per lavorare con quel valore prima che il framework MVC va e inizia spingendo di nuovo nel mio ViewModel? Preferirei mille volte questo essere fatto sul lato server che lato client.

Grazie !!

È stato utile?

Soluzione

Una soluzione potrebbe essere quella di scrivere un personalizzato modello di legante che sarà in grado di convertire legano $79.95 a un campo decimale nel modello. Un'altra soluzione è quella di farlo sul lato client. In un gestore form.submit jQuery è possibile modificare i valori dei campi di input per essere pubblicato.

Altri suggerimenti

È possibile utilizzare personalizzato Girl Leganti per spingere i dati pubblicati in un oggetto.

[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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top