Изменить данные публикации с помощью пользовательского расширения MVC?
-
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
}