У меня была та же ошибка, но причина отличалась от принятого ответа.Добавление пользовательского ModelBinder
исправило это для меня.
Я создал CData
класс, как описано здесь
Как сериализовать строку в виде CDATA с использованием XmlSerializer? (это последний ответ, если за него не проголосовали, потому что это отличное решение)
Я сериализую свою ViewModel в XML.Когда я устанавливаю тип свойства в моей ViewModel равным CData
, он автоматически сериализуется в раздел CData и десериализуется в поле CData
.(что здорово!)
Когда я выполняю действия поста в своем представлении, я хочу сохранить некоторые поля в моей ViewModel, чтобы они добавлялись в виде Html.HiddenFor
в форме.
Когдаотправить сделано, ошибка происходит (тот, что в заголовке).Связыватель модели пытается привязать строковое поле к полю CData, что не удается.
Связыватель пользовательской модели для типа CData
исправляет это
public class CDataModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
return new CData(result.AttemptedValue);
}
}
Global.asax
ModelBinders.Binders.Add(typeof(CData), new CDataModelBinder());