Frage

Ich möchte also einige benutzerdefinierte MVC -Erweiterungen schreiben, und die erste, die ich angehen möchte, ist eine formattedTextbox, um Dinge wie Währung, Daten und Zeiten zu verarbeiten. Ich habe das Rendern, dass es perfekt funktioniert, es formatiert, mit starken Typen und allem Golden arbeitet. Das Problem, auf das ich jetzt stehe, ist jedoch die Reinigung der formatierten Dinge, wenn die Seite die Daten zurückpostet.

Nehmen wir zum Beispiel ein Währungsformat. Verwenden wir USD für diese Beispiele. Wenn ein Objekt eine Eigenschaft als Dezimalheit hat, wäre der Wert 79.95. Ihre Bearbeitungsansicht wäre so etwas wie:

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

Das ist alles gut und gut für die Get -Anfrage, aber nach Post wird der Wert sein $79.95, was, wenn Sie dieser Dezimalheit zuweisen, sehr schnell unglücklich und schieben a 0 da drin.

Meine Frage ist also, wie ich einen Code bekomme, der irgendwo arbeitet, um mit diesem Wert zu arbeiten, bevor das MVC -Framework geht und beginnt, ihn wieder in mein ViewModel zu schieben? Ich würde viel lieber serverseitig als clientseitig gemacht werden.

Vielen Dank!!

War es hilfreich?

Lösung

Eine Lösung wäre, a zu schreiben Benutzerdefinierte Modellbinder die Bindungen konvertieren können $79.95 zu einem Dezimalfeld in Ihrem Modell. Eine andere Lösung besteht darin, dies auf der Client -Seite zu tun. In einem jQuery form.submit Handler Sie können die Werte der zu veröffentlichen Eingabefelder ändern.

Andere Tipps

Sie können verwenden Benutzerdefinierte Modellbinder Um die geposteten Daten in ein Objekt zu schieben.

[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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top