如果我使用MVC验证但发布JSON对象,如何在客户端验证?

时间:2017-04-02 21:26:49

标签: json asp.net-core data-annotations unobtrusive-validation

我正在开发一个ASP.NET核心Web应用程序,我使用DataAnnotations用验证属性来装饰我的视图模型。当我使用输入打开详细信息页面时,我看到Core将HTML5验证属性添加到呈现的HTML中(即data-val =" true")。

但是,当用户单击“保存”按钮时,我编写了自定义客户端代码,如下所示:

    $(document).on("click", "#SaveAsset", function (event) {
        event.preventDefault();
        Asset.Save();
    });

我还有一个像这样定义的Save函数:

window.Asset.Save = function () {

    var postData = {
        'Id': $("#Id").val(),
        'SerialNumber': $("#SerialNumber").val(),
        'PartNumber': $("#PartNumber").val(),
        'assetTypeId': $("#AssetTypeId").val()
    };

    $.post('/Asset/SaveAsset', postData);
}

我需要在调用$ .post之前先在客户端进行验证,但我对如何操作感到困惑。 Microsoft表明,当您将表单用于表单时,不引人注目的javascript会自动运行。但我没有使用HTML表单元素来提交我的页面。那么如何触发HTML5验证属性呢?

我添加了jquery.validate.js和jquery.validate.unobtrusive.js的链接。现在,如果单击“保存”按钮,数据将发送到服务器,控制器将检查ModelState。但它甚至不应该向服务器发送任何东西。客户端应该停止验证。

我是否应该停止这样做?例如,通过获取每个输入的val()来创建我的postData JSON对象。

我应该使用表单元素吗?我停止使用它,因为我的页面有数百个输入,所以我担心我会遇到问题。这样,我可以控制每个输入。

1 个答案:

答案 0 :(得分:1)

使用jQuery Validation Plugin之类的javascript解决方案在发送到服务器之前验证数据。否则,将数据发送到服务器,如果验证失败,则返回错误请求的错误。

例如

Return BadRequest(string[]{"Name is required", "Id must me a number"});

然后将错误和鞋子捕获给用户