我有TimeSpan(TimeWorked)的模型,我想将文本框绑定到TimeSpan的Hours和Minutes字段。
@Html.EditorFor(model => model.TimeWorked.Hours)
...
@Html.EditorFor(model => model.TimeWorked.Minutes)
但是在控制器post方法中,值不是发布模型的一部分,因为TimeSpan.Hours
和TimeSpan.Minutes
没有setter方法。
我如何实现这一目标?
答案 0 :(得分:3)
我希望这会有所帮助:
public class TestModel
{
public string name { get; set; }
public TimeSpan TimeWorked { get; set; }
public TestModel()
{
TimeWorked = new TimeSpan(3, 20, 0);
name = "hello";
}
}
public class TimeModelBinder:DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var model = (TestModel)base.BindModel(controllerContext, bindingContext);
var Hour = controllerContext.HttpContext.Request["TimeWorked.Hours"];
var minutes = controllerContext.HttpContext.Request["TimeWorked.Minutes"];
var time = new TimeSpan(int.Parse(Hour), int.Parse(minutes), 0);
model.TimeWorked = time;
return model;
}
}
public ActionResult Index([ModelBinder(typeof(TimeModelBinder))]TestModel _model)
{
}
答案 1 :(得分:0)
我猜问题是TimeSpan没有无参数控制器,默认模型绑定器无法创建它的新实例,您可能需要为TimeSpan定义模型绑定器,如https://gist.github.com/chaoaretasty/1671586
答案 2 :(得分:0)
我根据之前找到的版本为TimeSpan?
实现了自定义模型绑定器。直接粘贴在这里有点长,但我把它作为Gist