Zasadniczo mam problemy z wyświetlaniem błędów związanych z wystąpieniem błędu modelu zwróconych przez kontroler (WebApi). Korzystanie z MVC4, jQuery i nokaut. Mam nadzieję, że możesz zobaczyć, co próbuję osiągnąć od dołu - z góry dzięki.jQuery Validator.showErrors MVC ViewModel ModelState
Widok: -
<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>
nokaut ViewModel robi post/złożyć: -
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);
}
Kontroler: -
[ModelValidationFilter]
public HttpResponseMessage CompleteBooking(AdditionalBookingInfoViewModel model)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
ActionFilterAttribute (nota ModelState jest odsyłany)
public class ModelValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response =
actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
Przedstawiane znaczników: -
Firebug odpowiedź: -
Teraz wiem, że weryfikator będzie spróbować znaleźć element o nazwie 'model.CostCode' nie tylko "CostCode", ponieważ pojawia się w znacznikach, ale próbowałem ustawić nazwę Id & na "model.CostCode", aby dopasować, ale nie robi żadnej różnicy. Myślę, że jest problem z moją funkcją extractErrors.
Gdybym hardcode komunikat o błędzie walidator działa OK
validator.showErrors({
"CostCode" : "Test test test!"
});
Nawiasem mówiąc, jest to akceptowalny sposób pokazujący komunikaty sprawdzania poprawności po stronie serwera albo ja szczekanie na złe drzewo z to wszystko? Wszelkie wskazówki/komentarze są bardzo mile widziane. Dziękuję.
Teraz możesz dodać zdjęcia. – nemesv