У меня есть действие контроллера, определение которого выглядит как-
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
}
Свойство 'Name' заполняется вдействие контроллера, однако свойство SourceId остается нулевым.Параметр destinationId , который является long? , также заполняется.
При пошаговом выполнении исходного кода MVC (версия 2) это исключение, выбрасываемое DefaultModelBinder.
Преобразование параметра из типа 'System.Int32' в тип 'System.Nullable`1 [[System.Int64, mscorlib, Версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]]' не удалось, так какникакой преобразователь типов не может конвертировать между этими типами.
Если модель заменяется на long вместо long?, средство связывания модели по умолчанию устанавливает значение.
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"}