使用Model binder时出现奇怪的结果

时间:2017-01-15 13:15:20

标签: c# asp.net-mvc custom-model-binder

我有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; }
}

1 个答案:

答案 0 :(得分:1)

我刚刚通过在自定义Model Binder中添加以下行来解决了我的问题:

bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);

我不知道为什么我需要添加此行,因为当数据类型为字符串而不添加此行时它正在工作,但是如果不添加此行,则它不适用于DateTime类型。我真的希望有人向我解释。