Pergunta

Então, estou pensando em escrever algumas extensões MVC personalizadas e a primeira que estou tentando enfrentar é um formattedTextBox para lidar com coisas como moeda, datas e horários. Eu tenho a renderização dele funcionando perfeitamente, formatando -a, trabalhando com tipos fortes e tudo o que tudo dourado. No entanto, o problema em que estou me encontrando é limpar o material formatado quando a página publica os dados de volta.

Tomemos, por exemplo, um formato de moeda. Vamos usar o USD para esses exemplos. Quando um objeto tem uma propriedade como decimal, o valor seria 79.95. Sua visão de edição seria algo como:

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

Tudo isso é bom e bom para a solicitação de get, mas após o post, o valor será $79.95, que quando você atribui a esse decimal, fica descontente muito rapidamente e acaba empurrando um 0 lá.

Então, minha pergunta é: como faço para que o código trabalhe em algum lugar para trabalhar com esse valor antes que a estrutura do MVC vá e comece a empurrá -lo de volta ao meu viewmodel? Eu prefiro que isso seja feito no lado do servidor que o lado do cliente.

Obrigado!!

Foi útil?

Solução

Uma solução seria escrever um Adorável do modelo personalizado que poderá converter o Bind $79.95 para um campo decimal em seu modelo. Outra solução é fazê -lo no lado do cliente. Em um jQuery form.submit Manipulador Você pode modificar os valores dos campos de entrada a serem publicados.

Outras dicas

Você pode usar ligantes de modelos personalizados Para enfiar os dados postados em um objeto.

[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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top