我正在使用带有Knockoutjs的Web Api。我试图弄清楚如何将无效模型状态的细节返回给用户。
这是在VB我非常抱歉这不是我的错!!! (请随意给我许多减分,因为我理解这是vb)。
好的,我们去吧
所以我在模型上放了一个必填字段。
<Required>
Public Property test() As String
Get
Return m_test
End Get
Set(value As String)
m_test = value
End Set
End Property
Private m_test As String
控制器中的我有保存功能。
<HttpPost>
Public Async Function Save(data As Origin_SingleOvrUndr_main_rewrite_vm) As Task(Of IHttpActionResult)
If ModelState.IsValid Then
Await Origin_SingleOvrUndr_main_rewrite_vmRepository.SaveDataAsync(data)
Return Ok()
Else
Return BadRequest(ModelState)
End If
End Function
在我的html页面上,我正在调用save。
this.saveData = function () {
var data = ko.toJSON(self);
$.ajax({
url: "api/VMOriginSingleOvrUndrMainRewrite",
type: "POST",
data: data,
datatype: "json",
processData: false,
contentType: "application/json; charset=utf-8",
success: function (result) {
alert('save successfull');
},
error: function (xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
},
});
}
所以我故意遗漏帖子上的必填字段,看看会有什么回应。所以响应是(通过点击F12并查看IE11中的响应主体)
{"Message":"The request is invalid.","ModelState":{"data.test":["The test field is required."]}}
然而,只显示网页上的提醒。消息(请求无效)。
如何在jquery ajax错误部分中显示警报,是否需要有关测试字段的部分? (以及可能存在的任何其他消息?)
答案 0 :(得分:0)
您可以使用{k}视图中显示的名为observableArray
的{{1}}。
以下是与错误相对应的视图和模型的代码段。它需要原始响应,提取错误,并在视图中显示它们:
errors
<div class="errors" data-bind="foreach: errors">
<div>
<p data-bind="text:prop"></p>
<ul data-bind="foreach: errors">
<li data-bind="text: $data"></li>
</ul>
</div>
</div>
// see http://knockoutjs.com/documentation/observableArrays.html for info on removeAll
var vm = { errors: ko.observableArray([]) }
var r = {"Message":"The request is invalid.","ModelState":{"data.test":["The test field is required."]}};
vm.errors.removeAll();
for(p in r.ModelState) {
if (r.ModelState.hasOwnProperty(p)) {
vm.errors.push({prop: p, errors: r.ModelState[p]});
}
}
ko.applyBindings(vm);
.errors {
border: solid red 1px;
border-radius: 10px 2px 2px;
background-color: #FF8;
color: #D10;
padding: 10px;
font-family: 'Segoe UI', 'Arial';
}