![](/img/trans.png)
[英]Showing a success validation message in ASP.Net MVC from server side validation
[英]asp.net mvc + knockout: Showing validation result from server side logic
我想将验证结果从服务器传递到客户端并显示消息。
没有KnockOut.js,它非常简单:
Html.ValidationMessageFor
) 使用KnockOut时该怎么办? 最佳做法是什么?
我需要用ViewModel返回我的ModelState吗? 如果是,我应该如何将其绑定到ValidationMessage占位符? 有没有要使用的插件?
更新1:
我知道如何使用客户端验证库(Ko验证,jQuery验证),这不是我的问题。
我知道如何使用Ajax将模型状态返回给客户端。
问题是: 将错误列表绑定到UI元素的标准方法是什么? 我需要迭代我的收藏并将它们一一绑定吗? 有没有可以将我的模型状态对象绑定到ui的插件?
(就像您不使用基因剔除,而mvc会处理并将其绑定到验证消息占位符一样。)
我面临着同样的问题。 首先,我尝试实施此解决方案( https://datatellblog.wordpress.com/2015/06/26/client-and-server-validation-with-web-api-and-knockout/ ),但是它没有用。
我的最终解决方案是这样的:
将ModelState转换为JS数组:
var modelState = null; modelState = @Html.Raw(Json.Encode(ViewData.ModelState.Where(k => k.Value.Errors.Any()).Select(t => new { Key = t.Key, Value = t.Value.Errors.Select(e => e.ErrorMessage) }))); function getModelState() { return modelState; }
创建视图模型后,向其中添加错误:
self.addErrors = function (data, modelState) { $(data).each(function (dataIndex, dataItem) { var itemModelState = $(modelState).filter(function (filterIndex) { return stringStartsWith(modelState[filterIndex].Key, "Addresses[" + dataIndex + "]") }); $(itemModelState).each(function (index, item) { var field = item.Key.split(".")[1]; if (field === "NumberOfPositions") { $(item.Value).each(function (valueIndex, valueItem) { var name = item.Key.replace("[", "\\\\[").replace("]", "\\\\]").replace(".", "\\\\.") + "_Error"; $("#" + name).text(valueItem); $("#" + name).removeClass("field-validation-valid").addClass("field-validation-error").show(); }); } }); }); };
至少在我看来,这有效。 希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.