Esta es la continuación de aquí
¿Cuál es la forma correcta de crear una clase en JavaScript y pasarla al controlador MVC?
public class VesselDetail { public string VesselName { get; set; } public string VesselData { get; set; } } public class MainModel { public List<VesselDetail> VesselDetails { get; set; } }He creado modelos de JavaScript de la siguiente manera
class VesselDetail { VesselName; VesselData; } class VesselDetails { constructor() { this.VesselDetails = []; } addVessel(VesselName,VesselData) { let p = new VesselDetail(); p.VesselName= VesselName; p.VesselData= VesselData; this.VesselDetails.push(p); return p; } } class MainModel { VesselDetails = {}; }En mi evento de clic de botón, vincularé lo requerido y lo pasaré al controlador MVC de la siguiente manera
let model= new MainModel(); let vesselDetail = new VesselDetails(); vesselDetail.addVessel("vesselName1", "vessel desc"); vesselDetail.addVessel("vesselName2", "vessel desc1"); model.VesselDetails= vesselDetail; $.ajax({ url: url, type: 'POST', async: false, data: '{mainModel: ' + JSON.stringify(model) + '}', contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (result) { }, error: function (request) { } });Pero en el controlador VesselDetails se vuelve nulo, ¿cuál era la forma correcta de pasar la lista a mvc desde JavaScript?
@sarga
Aquí está mi clase c # según la discusión
Public class Attachment { Public string FileName {get;set;} Public string FileType {get;set;} } Public class Report { Public string ReportName {get;set;} Public List<Attachment> Attachments {get;set;} }¿Cuál puede ser el equivalente en js y enviarlo al controlador mvc?
Desafortunadamente, tiene un error en sus clases de JavaScript: doble VesselDetails. Ofrezco usar estas clases, este es un estilo más orientado a objetos.
class VesselDetail { constructor(vesselName, vesselData) { this.VesselName = vesselName; this.VesselData = vesselData; } VesselName; VesselData; } class MainModel { VesselDetails=[]; addVesselDetails(...args) { this.VesselDetails = args; } }ajax
let model = new MainModel(); //using special function model.addVesselDetails( new VesselDetail("vesselName1", "vessel desc") ,new VesselDetail("vesselName2", "vessel desc2") ); //or directly model.VesselDetails.push( new VesselDetail("vesselName1", "vessel desc"), new VesselDetail("vesselName2", "vessel desc2") ); $.ajax({ url: url, type: 'POST', async: false, data: JSON.stringify(model), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (result) { }, error: function (request) { } });acción
public JsonResult CreateVessel([FromBody]MainModel mainModel) { // some processing return new JsonResult ( mainModel.VesselDetails[0].VesselName ); }ACTUALIZAR
La clase de informe me parece muy parecida a la clase MainModel
class Attachment { constructor(fileName, fileType) { this.FileName = fileName; this.FileType = fileType; } FileName; FileType; } class Report { Attachments = []; addAttachments(...args) { this.Attachments = args; } }y puede crear instancias de la misma manera que está utilizando MainModel