c# – 从整数模型绑定TimeSpan
发布时间:2020-12-15 08:31:16 所属栏目:百科 来源:网络整理
导读:我想声明我的View Model类型TimeSpan的一些属性来显示TotalMinutes属性并绑定回TimeSpan. 我已经绑定了属性而没有使用强类型帮助器来检索TotalMinutes属性: %=Html.TextBox("Interval",Model.Interval.TotalMinutes)% 当该字段绑定回View Model类时,它将该
|
我想声明我的View Model类型TimeSpan的一些属性来显示TotalMinutes属性并绑定回TimeSpan.
我已经绑定了属性而没有使用强类型帮助器来检索TotalMinutes属性: <%=Html.TextBox("Interval",Model.Interval.TotalMinutes)%>
当该字段绑定回View Model类时,它将该数字解析为一天(1440分钟). 如何在某些属性上覆盖此行为(最好使用View Model本身的属性)? 解决方法
编写自定义模型绑定器似乎是一个好主意:
public class TimeSpanModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".TotalMinutes");
int totalMinutes;
if (value != null && int.TryParse(value.AttemptedValue,out totalMinutes))
{
return TimeSpan.FromMinutes(totalMinutes);
}
return base.BindModel(controllerContext,bindingContext);
}
}
并在Application_Start中注册它: protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.Add(typeof(TimeSpan),new TimeSpanModelBinder());
}
最后总是喜欢在您的视图中使用强类型助手: <% using (Html.BeginForm()) { %>
<%= Html.EditorFor(x => x.Interval) %>
<input type="submit" value="OK" />
<% } %>
和相应的编辑器模板(?/ Views / Home / EditorTemplates / TimeSpan.ascx): <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TimeSpan>" %> <%= Html.EditorFor(x => x.TotalMinutes) %> 现在您的控制器可以像下面这样简单: public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Interval = TimeSpan.FromDays(1)
};
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// The model will be properly bound here
return View(model);
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
