加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何获取ModelState.AddModel错误绑定到knockout

发布时间:2020-12-16 03:54:10 所属栏目:asp.Net 来源:网络整理
导读:我已使用以下代码设置Knockoutjs以动态创建可编辑的值列表: var requirementModel = function() { var self = this; self.requirementtypes = ko.observableArray(@Html.Interpret(Model.requirementtypes)); self.requirementid = ko.observable(@Html.Int
我已使用以下代码设置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(“输入字段名称”,“我可怜的傻瓜打破了这个” );对于非动态字段,这适用于强类型或@ Html.ValidationMessage(“输入字段名称”)

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

我有与客户端一起工作的span标签,它们完美地工作.但是,在服务器端验证失败并返回页面后,它们不会被挂钩.知道如何实现这个吗?

谢谢

解决方法

我刚刚为我当前的工作项目编写了这个代码.我不能发布代码规则的代码.就像上面的评论所说,没有一种优雅的方式.我将描述我们用于显示错误消息的步骤.

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

我采取的步骤是,在控制器收到ajax数据进行验证后开始 –

>验证接收的数据模型
>创建一个类以返回如下所示的结果

Class AjaxResults{
    bool success {get; set;);
    object returnedData {get; set;);
}

>如果模型验证,则返回AjaxResults,其中success = true且returnedData =“validated data model”
>如果模型没有验证那么
>将所有错误收集到对列表中.其中key = fieldID和value =“错误消息”.
>返回AjaxResults,成功= false,返回Data =“错误列表”
>客户端收到AjaxResults对象后
>如果success = true,则正常处理结果.
>如果success = false,则迭代列表突出显示包含错误的字段并显示错误消息.

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

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

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

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读