У меня есть действие контроллера, определение которого выглядит как
public ActionResult ChangeModel( IEnumerable<MyModel> info, long? destinationId)
И модель:
public class MyModel
{
public string Name; //Gets populated by default binder
public long? SourceId; //remains null though the value is set when invoked
}
Свойство "Имя" заносится в действие контроллера, однако свойство SourceId остается пустым. destinationId, который является параметром long?, также заселяется.
При переходе через исходный код MVC (версия 2) это исключение, вызванное DefaultModelBinder.
Преобразование параметров из типа 'System.Int32' для ввода типа 'System.Nullable`1 [[System.Int64, mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]' не удалось, поскольку преобразователь типа не может преобразовывать между этими типами.
Если модель изменена на длинную, а не длинную?, связующее устройство по умолчанию устанавливает значение.
public class MyModel
{
public string Name {get;set;}; //Gets populated by default binder
public long SourceId {get;set;}; //No longer long?, so value gets set
}
Это известная проблема? Поскольку исходный код MVC оптимизирован, я не могу выполнить большую часть кода.
Обновление: отправленный запрос является Http POST с использованием Json с похожим исходным JSon -
{"info":[{"Name":"CL1","SourceId":2}], "destinationId":"1"}