Странный результат при использовании связывателя модели

У меня есть 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"/>
}

Но когда я использую свой пользовательский Model 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 ответ

Решение

Я только что решил свою проблему, добавив следующую строку в мой пользовательский связыватель моделей:

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

Я не знаю, почему мне нужно добавить эту строку, потому что она работает, когда тип данных является строкой без добавления этой строки, но без добавления этой строки она не работает с DateTime тип. Я действительно надеюсь, что кто-нибудь объяснит мне это.

Другие вопросы по тегам