Изменить данные поста с пользовательским расширением MVC? - PullRequest
0 голосов
/ 30 марта 2010

Итак, я пытаюсь написать несколько собственных расширений MVC, и первое, что я пытаюсь решить, - это FormattedTextBox для обработки таких вещей, как валюта, даты и время. У меня есть рендеринг, который работает отлично, форматирует его, работает с сильными типами и всем золотым. Однако проблема, с которой я сейчас сталкиваюсь, заключается в очистке отформатированного содержимого, когда страница отправляет данные обратно.

Взять, к примеру, формат валюты. Давайте использовать USD для этих примеров. Если у объекта есть свойство в виде десятичного числа, значение будет 79.95. Ваш вид редактирования будет выглядеть примерно так:

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

Это все хорошо для запроса GET, но после POST значение будет $79.95, которое, когда вы назначаете этому десятичному знаку, очень быстро становится несчастным и в итоге выдает туда 0 .

Итак, мой вопрос: как заставить код работать где-то для работы с этим значением до того, как MVC Framework запустится и начнет пихать его обратно в мою ViewModel? Я бы предпочел сделать это на стороне сервера, а не на стороне клиента.

Спасибо !!

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Вы можете использовать пользовательских связывателей моделей , чтобы поместить опубликованные данные в объект.

[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
}
1 голос
/ 30 марта 2010

Одним из решений будет написать пользовательское связующее для модели , которое сможет преобразовать связывание $79.95 в десятичное поле вашей модели. Другое решение - сделать это на стороне клиента. В обработчике jQuery form.submit вы можете изменить значения полей ввода для публикации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...