У меня есть следующий код JS, где я вызываю метод контроллера SaveSettings:
function SaveSettings() {
// get json object from knockoutjs object
var data = ko.toJSON(viewModel);
var params = JSON.stringify(data);
$.ajax({
url: '/MyAjax/SaveSettings/',
type: "POST",
data: JSON.stringify(data),
dataType: "JSON",
contentType: "application/json; charset=UTF-8",
success: function (result) {
alert('ok');
}
});
}
Данные JSON имеют следующий формат и отправляются на контроллер:
{
"Name":"xcvxcvxcv",
"GeneralSetting":
{
"Data1":{"IsSync":true,"Value":0},
"Data2":{"IsSync":false,"Value":0},
"PasswordLenght":{"IsSync":false,"Value":7},
"PasswordMessage":{"IsSync":false,"Value":null},
"DiscoverSerialPort":{"IsSync":false,"Value":true}
},
"MailSettings":
{
"IsEnabled":{"IsSync":false,"Value":false},
"ServerAddress":{"IsSync":false,"Value":null},
"PortNumber":{"IsSync":false,"Value":0},
"UserName":{"IsSync":false,"Value":null},
"Password":{"IsSync":false,"Value":null},
"IsSecureNetwork":{"IsSync":false,"Value":false},
"PollFrequency":{"IsSync":false,"Value":0},
"AdminFromEmail":{"IsSync":false,"Value":null},
"AdminEmail":{"IsSync":false,"Value":null},
"ReplyToEmail":{"IsSync":false,"Value":null},
"BCCEmail":{"IsSync":false,"Value":null},
"AuthenticationMethod":{"IsSync":false,"Value":0}
}
}
мой метод контроллера выглядит так:
.....
[HttpPost]
public JsonResult SaveSettings(GlobalData data)
{
return Json(false.ToString(), JsonRequestBehavior.AllowGet);
}
.....
public class GlobalData
{
public string Name { get; set; }
public GeneralSetting GeneralSetting { get; set; }
public MailSetting MailSettings { get; set; }
}
public class MailSetting
{
public SelectedProperty IsEnabled { get; set; }
public SelectedProperty ServerAddress { get; set; }
public SelectedProperty PortNumber { get; set; }
public SelectedProperty UserName { get; set; }
public SelectedProperty Password { get; set; }
public SelectedProperty IsSecureNetwork { get; set; }
public SelectedProperty PollFrequency { get; set; }
public SelectedProperty AdminFromEmail { get; set; }
public SelectedProperty AdminEmail { get; set; }
public SelectedProperty ReplyToEmail { get; set; }
public SelectedProperty BCCEmail { get; set; }
public SelectedProperty AuthenticationMethod { get; set; }
}
public class GeneralSetting
{
public SelectedProperty ScreenTimeout { get; set; }
public SelectedProperty AdminScreenTimeout { get; set; }
public SelectedProperty PasswordLenght { get; set; }
public SelectedProperty PasswordMessage { get; set; }
public SelectedProperty DiscoverSerialPort { get; set; }
}
public class SelectedProperty
{
public bool IsSync { get; set; }
public object Value { get; set; }
}
Объект JSON и мой класс GlobalData имеют одинаковую структуру. (Похоже, что они имеют)
Но тогда метод SaveSettings начинает работать. Переменная GlobalData содержит NULL во всех свойствах, которые определены в классе GlobalData.
Почему это происходит? Правильна ли структура моего класса для внутреннего сопоставления MVC?