Изменить данные публикации с помощью пользовательского расширения MVC?

StackOverflow https://stackoverflow.com/questions/2542576

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Спасибо!!

Это было полезно?

Решение

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

Другие советы

Вы можете использовать Пользовательские модельные связующие засунуть размещенные данные в объект.

[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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top