基本上我无法显示从控制器(WebApi)返回的模型状态错误。使用 MVC4、jQuery 和淘汰赛。希望您能从下面看到我想要实现的目标 - 在此先感谢。
看法:-
<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>
淘汰视图模型进行发布/提交:-
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);
}
控制器:-
[ModelValidationFilter]
public HttpResponseMessage CompleteBooking(AdditionalBookingInfoViewModel model)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
ActionFilterAttribute(注意被发回的模型状态)
public class ModelValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response =
actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
渲染标记:-
萤火虫回应:-
现在,我知道验证器将尝试查找名称为“model.CostCode”的元素,而不仅仅是标记中显示的“CostCode”,但我尝试将 Id 和名称设置为“model.CostCode”以匹配但这没有任何区别。我认为我的 extractErrors 函数有问题。
如果我对错误消息进行硬编码,则验证器可以正常工作
validator.showErrors({
"CostCode" : "Test test test!"
});
顺便说一句,这是显示服务器端验证消息的一种可接受的方式,还是我用这一切来找错树?非常欢迎任何指针/评论谢谢。