que tienen Knockoutjs de configuración para crear dinámicamente una lista editable de valores utilizando el siguiente código:¿Cómo consigo que el error ModelState.AddModel se vincule con los espacios de validación creados dinámicamente?
var requirementModel = function() {
var self = this;
self.requirementtypes = ko.observableArray(@Html.Interpret(Model.requirementtypes));
self.requirementid = ko.observable(@Html.Interpret(Model.requirementid));
self.AddRequirementType = function() {
self.requirementtypes.push({
requirementtypeid: null,
number: "",
requirementid: 0
});
};
self.RemoveType = function(Type) {
self.requirementtypes.remove(Type);
};
self.hookUpValidation = function() {
$.validator.unobtrusive.parseDynamicContent('.dynamicData');
};
};
var viewModel = new requirementModel();
ko.applyBindings(viewModel);
con HTML:
<div class="small-box dynamicData" data-bind="template:{ name: 'requirementType-template', foreach: requirementtypes, afterRender:$root.hookUpValidation }" ></div>
<button data-bind='click: AddType'>Add Type</button>
he enganchado hasta la validación de datos dinámicos utilizando el código recomendado En stackoverflow .
Cuando publico de nuevo en el servidor (no estoy usando JSON solo en la publicación) puedo hacer una validación más compleja y si algo falla puedo usar ModelState.AddModelError ("input field name", "Lamento al tonto" eso rompió esto "); Esto funciona perfectamente con strong type o @ Html.ValidationMessage ("nombre de campo de entrada") para los campos no dinámicos
Sin embargo, no encuentro una forma de enganchar el Server Side Model Error al contenido dinámico.
Tengo las etiquetas span que funcionan con el lado del cliente y funcionan perfectamente. Sin embargo, no se están enganchando a los datos devueltos después de que la validación en el servidor falla y devuelve la página. ¿Alguna idea de cómo lograr esto?
Gracias
El enfoque preferido es crear un ModelBinder personalizado para vincular los valores entrantes a su modelo y permitir que el mecanismo de validación predeterminado se active. ¿Quiere decir que sus modelos se generan en el lado del cliente y no lo tiene definido en el servidor? – Aliostad
El modelo se define en el lado del servidor. Una sección de la página utiliza knockoutjs para agregar elementos a una lista. Estoy recuperando todo perfectamente a través de la publicación. Los datos dinámicos están todos publicados. El problema es si elevo un lado del servidor de errores (por ejemplo, validación compleja) y luego vuelvo a la vista, no se vinculan los errores generados con los elementos creados dinámicamente. – GraemeMiller
Estoy pensando que probablemente tenga que acceder al modelo estatal y agregar los errores apropiados al modelo Knockout y luego usar eso. Sólo me preguntaba si había una manera más elegante (como la forma en que obtuve la validación del lado del cliente) – GraemeMiller