Fondamentalmente sto riscontrando problemi con gli errori di stato del modello restituiti dal controller (WebApi). Utilizzo di MVC4, jQuery e knockout. Spero che tu possa vedere quello che sto cercando di ottenere dal sotto - grazie in anticipo.jQuery Validator.showErrors MVC ViewModel ModelState
Vista: -
<div class="editor-field">
@Html.TextBoxFor(model => model.CostCode,
new
{
placeholder = "cost/budget code",
data_bind = "value: CostCode"
})
</div>
<div>
@Html.ValidationMessageFor(model => model.CostCode)
</div>
ko viewmodel fare il/inviare posta: -
if (validator.valid())
{
console.log('is valid');
$.ajax({
url: '/api/Booking/CompleteBooking',
type: 'POST',
dataType: 'json',
data: ko.mapping.toJS(self),
error: function (jqXHR) {
extractErrors(jqXHR, validator);
},
success: function (data) {
console.log(data);
}
});
}
function extractErrors(jqXhr, validator)
{
var data = $.parseJSON(jqXhr.responseText),
errors = { };
$.each(data.ModelState, function (i, item) {
errors[i] = item;
});
console.log(errors);
validator.showErrors(errors);
}
Controller: -
[ModelValidationFilter]
public HttpResponseMessage CompleteBooking(AdditionalBookingInfoViewModel model)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
ActionFilterAttribute (notare il ModelState essere rimandato)
public class ModelValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response =
actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
markup resa: -
Firebug risposta: -
Ora, so che il validatore cercherà di trovare un elemento con il nome 'model.CostCode' non solo "CostCode" come appare nel markup, ma ho provato a impostare il nome dell'id & in "model.CostCode" per farlo corrispondere, ma non fa alcuna differenza. Penso che ci sia un problema con la mia funzione extractErrors.
Se io hardcode un messaggio di errore del validatore funziona bene
validator.showErrors({
"CostCode" : "Test test test!"
});
A proposito, questo è un modo accettabile di mostrare messaggi di convalida lato server o sono io ad abbaiare contro l'albero sbagliato con tutto questo? Qualsiasi suggerimento/commento molto benvenuto grazie.
Ora è possibile aggiungere le immagini. – nemesv