У меня есть модель нокаута, которая публикуется с помощью метода сохранения:
self.save = function(form) {
ko.utils.postJson($("form")[0], self);
};
Я проверяю запрос, чтобы убедиться, что все данные публикуются правильно (это так):
Однако, когда я доберусь до своего действия:
[HttpPost]
public ActionResult Create(EquipmentCreateModel equipmentCreateModel)
{
/stuff here
}
BuildingCode и Room содержат экранированные кавычки, а идентификаторы не равны нулю, но имеют счетчик 0:
И мой ModelState недействителен, есть одна ошибка для свойства Identifiers
, у которого есть попытка значения:
и сообщение об исключении:
"Преобразование параметра из типа 'System.String' в тип 'System.Collections.Generic.KeyValuePair`2 [[System.Guid, mscorlib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089], [ System.String, mscorlib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089]] 'не удалось, поскольку преобразователь типов не может преобразовывать эти типы. "
Моя модель:
public class EquipmentCreateModel
{
//used to populate form drop downs
public ICollection<Building> Buildings { get; set; }
public ICollection<IdentifierType> IdentifierTypes { get; set; }
[Required]
[Display(Name = "Building")]
public string BuildingCode { get; set; }
[Required]
public string Room { get; set; }
[Required]
[Range(1, 100, ErrorMessage = "You must add at least one identifier.")]
public int IdentifiersCount { get; set; } //used as a hidden field to validate the list
public string IdentifierValue { get; set; } //used only for knockout viewmodel binding
public IDictionary<Guid, string> Identifiers { get; set; }
}
Сначала я подумал, что это проблема с нокаутом, но потом выяснил, что данные не были правильно размещены в запросе. Я исправил это и все еще имел ту же проблему. Я думал, что MVC3 автоматически преобразует Json сейчас? Почему мои простые свойства отображаются в экранированных кавычках и почему моя коллекция идентификаторов не может быть правильно заполнена из опубликованных данных?