所以我正在研究编写一些自定义MVC扩展,我试图解决的第一个是FormattedTextBox来处理诸如货币,日期和时间之类的事情。我有完美的渲染工作,格式化,使用强大的类型和一切都是金色的。但是,我现在遇到的问题是当页面发回数据时清理格式化的东西。
以货币格式为例。我们将这些例子用于美元。当对象具有十进制属性时,该值将为79.95
。您的编辑视图类似于:
<%= Html.FormattedTextBox(model => Model.Person.HourlyWage, "{0:C}") %>
对于GET请求来说,这一切都很好,但是在POST时,值将是$79.95
,当你分配给那个小数时,会很快地变得不快乐并最终推迟{{1}在那里。
所以我的问题是,在MVC框架进入并开始将其推回到我的ViewModel之前,如何让代码在某处工作以使用该值?我宁愿这是服务器端而不是客户端。
谢谢!
答案 0 :(得分:1)
一种解决方案是编写一个custom model binder,它可以将绑定$79.95
转换为模型中的十进制字段。另一种解决方案是在客户端进行。在jQuery form.submit
处理程序中,您可以修改要发布的输入字段的值。
答案 1 :(得分:1)
您可以使用custom Model Binders将发布的数据推送到对象中。
[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
}