Странный результат при использовании связывателя модели
У меня есть 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
тип. Я действительно надеюсь, что кто-нибудь объяснит мне это.