Tengo un problema extraño con MVC3 y el enlace del modelo. Cuando publico un objeto JSON en mi controlador, la carpeta modelo no puede crear un objeto tipeado. Todas las propiedades son las predeterminadas (es decir, cadenas vacías)MVC3 El enlace de modelo Json no funciona cuando se envía al servidor
Sin embargo, si creo una instancia en el servidor y la envío como resultado de una acción JSON, los datos en el cable son idénticos.
He tratado con
$.ajaxSettings.traditional = true;
y no hace ninguna diferencia
Como ejemplo, si he puesto
{"RoutineName":"My new routine","Routines":[{"DayName":"Monday","Items":[21,31]}]}
falla El aglutinante modelo, sino que procede del servidor los datos parece
{"RoutineName":"Routine From Code","Routines":[{"DayName":"Monday","Items":[1,2]},{"DayName":"Tuesday","Items":[]}]}
el código HTML utilizado para generar esto parece
$('#submitRoutine').click(function() {
var routines = [];
$('.DayName').each(function (index, item) {
var $item = $(item);
var name = $item.html();
var routineItems = [];
$($item.attr('href')).find('.itemId').each(function() {
routineItems.push(parseInt($(this).val(), 10));
});
routines.push({
DayName: name,
Items: routineItems
});
});
var routine = {
RoutineName: $('#routineName').val(),
Routines: routines
};
$.ajaxSettings.traditional = true;
$.post('/Machine/CreateRoutine', JSON.stringify(routine),function (data) {},'json');
});
Así que parece que la unión de un objeto introducido a JSON modelo está bien, pero volver a la inversa no es. ¿Hay algo que me he perdido?
Los modelos están en F #
type RoutineDayViewModel() =
let mutable _name = String.Empty
let mutable _items = new ResizeArray<int>()
member x.DayName with get() = _name and set value = _name <- value
member x.Items with get() = _items and set value = _items <- value
type RoutineViewModel() =
let mutable _name = String.Empty
let mutable _routines = new ResizeArray<RoutineDayViewModel>()
member x.RoutineName with get() = _name and set value = _name <- value
member x.Routines with get() = _routines and set value = _routines <- value
EDIT: También he probado con las siguientes clases de C# y obtener el mismo resultado
public class RoutineDayViewModel
{
public string DayName { get; set; }
public List<int> Items{ get; set; }
}
public class RoutineViewModel
{
public string RoutineName { get; set; }
public List<RoutineDayViewModel> Routines { get; set; }
}
También he añadido lo siguiente a la Global.asax
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
Gracias
¿Cómo se ve su modelo? Estás usando getters y setters ¿no? – JesseBuesking
, sí, son modelos F # pero tienen captadores y decodificadores igual que una clase C#. He agregado el código del modelo a mi pregunta. ResizeArray es un nombre F # para List –
Dylan
Sé en C# que debe indicar explícitamente que un controlador permite solicitudes JSON GET o de lo contrario las rechazará. ¿Has hecho eso por tus controladores?* Es malo que estés publicando>< – JesseBuesking