我有ActionLink
这样:
@Html.ActionLink("Click", "Create", "Default1", new {date = Model.Date} , null)
这是Create
:
public ActionResult Create(DateTime? date)
{
return View();
}
这在创建视图中完美显示:
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Date) //I get the correct value here
<input type="submit" value="Save"/>
}
但是当我使用我的自定义模型Binder时,我得到空结果。为什么?我的模型绑定器很简单,它没有做任何特殊的事情:
public class SimpleModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
return DateTime.Parse(valueResult.AttemptedValue);
}
}
在我的global.asax
中注册此模型绑定器后,我在TextBoxFor
中得到空字符串。你知道吗?
ModelBinders.Binders.Add(typeof(DateTime?), new SimpleModelBinder());
我的模特:
public class Test
{
public int Id { get; set; }
public DateTime? Date { get; set; }
}
答案 0 :(得分:1)
我刚刚通过在自定义Model Binder中添加以下行来解决了我的问题:
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);
我不知道为什么我需要添加此行,因为当数据类型为字符串而不添加此行时它正在工作,但是如果不添加此行,则它不适用于DateTime
类型。我真的希望有人向我解释。