gpt4 book ai didi

asp.net-mvc - 如何将 ModelState.AddModel Error 绑定(bind)到 knockout 动态创建的验证范围?

转载 作者:行者123 更新时间:2023-12-01 23:42:41 24 4
gpt4 key购买 nike

我已经设置 Knockoutjs 使用以下代码动态创建可编辑的值列表:

       var requirementModel = function() {
var self = this;
self.requirementtypes = ko.observableArray(@Html.Interpret(Model.requirementtypes));
self.requirementid = ko.observable(@Html.Interpret(Model.requirementid));
self.AddRequirementType = function() {
self.requirementtypes.push({
requirementtypeid: null,
number: "",
requirementid: 0
});
};
self.RemoveType = function(Type) {
self.requirementtypes.remove(Type);
};
self.hookUpValidation = function() {
$.validator.unobtrusive.parseDynamicContent('.dynamicData');
};
};
var viewModel = new requirementModel();
ko.applyBindings(viewModel);

使用 html:

 <div class="small-box dynamicData"  data-bind="template:{ name: 'requirementType-template', foreach: requirementtypes, afterRender:$root.hookUpValidation }" ></div>
<button data-bind='click: AddType'>Add Type</button>

我已经使用stackoverflow上推荐的代码连接了动态数据的验证。 .

当我回发到服务器时(我不使用 JSON 只是表单发帖),我可以进行更复杂的验证,如果出现问题,我可以使用 ModelState.AddModelError("input field name", "I pity the傻瓜打破了这个”);这与强类型或非动态字段的 @Html.ValidationMessage("input field name") 完美配合

但是我找不到将服务器端模型错误 Hook 到动态内容的方法。

我有与客户端配合使用的跨度标签,它们工作得很好。但是,它们不会与服务器端验证失败并返回页面后返回的数据 Hook 。知道如何实现这一目标吗?

谢谢

最佳答案

我刚刚完成了我当前工作项目的编码。我无法发布调解规则的代码。就像您上面的评论所说,没有一种优雅的方法。我将描述我们显示错误消息所采取的步骤。

首先,修改动态生成的 html,以便每个 html 都具有与 MVC3 @Html.ValidationFor(...) 控件等效的代码。接下来,每个动态控件都需要有一个 id 字段,您可以使用该字段来定位要添加错误消息的控件。

我采取的步骤是,在 Controller 收到用于验证的ajax数据后开始 -

  1. 验证接收到的数据模型

  2. 创建一个类来返回如下所示的结果

    Class AjaxResults{
    bool success {get; set;);
    object returnedData {get; set;);
    }
  3. 如果模型有效,则返回 AjaxResultssuccess = true 且 returnedData =“经过验证的数据模型”

  4. 如果模型未通过验证

  5. 将所有错误收集到一个对列表中。其中 key = fieldID,value =“错误消息”。
  6. 返回AjaxResultssuccess =假和returnedData =“错误列表”

  7. 客户端收到 AjaxResults 后对象

  8. 如果 success = true,正常处理结果。

  9. 如果 success = false,遍历列表突出显示有错误的字段并显示错误消息。

在最后一步中,您可以使用jquery验证消息显示错误代码。如果你想这样做,那么在 jquery.unobtrusive.valiation.js 文件中

  1. 添加代码以复制文件中 onError 方法的功能。
  2. 添加代码以通过错误列表进行交互,调用 onError 方法来显示消息。请注意,信息存储在错误消息范围的 .data 属性中。
  3. 您可能需要在提交表单时编写代码来清除所有这些错误。

这是一个相当长的过程。但代码很容易模块化为可调用的例程。我们目前正在我们的生产代码中使用它,并且在实践中,它成为我们框架代码的一部分。

希望这有帮助。

关于asp.net-mvc - 如何将 ModelState.AddModel Error 绑定(bind)到 knockout 动态创建的验证范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com