在客户端的 ASP.NET MVC 中验证字符串数组

Validate String Array In ASP.NET MVC in client side

提问人:petrov peter 提问时间:1/15/2019 最后编辑:petrov peter 更新时间:1/15/2019 访问量:1318

问:

这是我的第一篇文章。

我需要如下所示的字符串数组验证。

[Required(ErrorMessage = "Content name is required")]
public string[] ContentName { get; set; }

我找到了一个有同样情况的帖子

这个答案和以下代码对我帮助很大,我可以解决我的问题。

public class StringArrayRequiredAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid (object value, ValidationContext validationContext)
    {
        string[] array = value as string[];

        if(array == null || array.Any(item => string.IsNullOrEmpty(item)))
        {
            return new ValidationResult(this.ErrorMessage);
        }
        else
        {
            return ValidationResult.Success;
        }
    }
}

[StringArrayRequired(ErrorMessage = "Content name is required")]
public string[] ContentName { get; set; }

但现在我发现了另一个问题。此验证仅适用于服务器端。我希望我也能得到客户验证。因为这会让我的客户更快乐!

那么你能给我一个很好的方法吗?等待您的答案!!


谢谢你的帮助。 我在我的视图中写了一个简短的代码。

$.validator.addMethod('stringarrayrequired', function (value, element, params) {

    let array = value;

    if (array == null) {
        return false;
    }

    for (var i = 0; i < array.length; i++) {
        if (!array[i]) {
            return false;
        }
    }
    return true;
}, '');



$.validator.unobtrusive.adapters.add("stringarrayrequired", function (options) {
    options.rules["stringarrayrequired"] = "#" + options.element.name.replace('.', '_'); // mvc html helpers
    options.messages["stringarrayrequired"] = options.message;
});

(对不起,我的JS不流利...... 我将 id=“stringarrayrequired” 添加到我的 .但这行不通。 我还检查了html代码。当我单击提交按钮时,“ContentName”的输入标签中应该有一个 class=“input-validation-error” 或 “valid”,但我找不到它们。

我仍然需要更多信息...有人帮忙吗?


我找到了解决我问题的方法。

(我将属性名称 ContextName 更改为 Selection)

[Display(Name = "Selections")]
public Selection[] Selections { get; set; } 

public class Selection
{
    [Required(ErrorMessage = "SelectionItem is empty")]
    public string SelectionItem { get; set; }
}

我使用 Selections for 、SelectionItem for 和 。

如您所知,[Required] 属性不适用于 string[]。因此,我创建了一个 Selection 类并将 string[] 更改为 Selection[],并将 [Required] 属性应用于字符串。

我知道这不是一个干净的方法......我会使用万无一失的东西。

ASP.NET-MVC 验证 客户端

评论

0赞 Hooman Bahreini 1/15/2019
您可以研究万无一失,它为您构建客户端自定义验证。
0赞 petrov peter 1/15/2019
我检查了链接,这似乎是解决我问题的好方法!这在 ASP.NET Core 2.0 中有效吗?
0赞 Hooman Bahreini 1/15/2019
是的,你可以使用它。
0赞 Hooman Bahreini 1/16/2019
如果您想回答自己的问题,请不要在问题中包含答案。只需在页面底部添加您自己的答案即可。

答:

0赞 TanvirArjel 1/15/2019 #1

在视图中添加以下代码:javaScript

$.validator.addMethod('stringarrayrequired', function (value, element, params) {
    // here return true or false based on checking the input value
},'');


$.validator.unobtrusive.adapters.add("stringarrayrequired", function (options) {
    options.rules["stringarrayrequired"] = "#" + options.element.name.replace('.', '_'); // mvc html helpers
    options.messages["stringarrayrequired"] = options.message;
});

评论

0赞 petrov peter 1/15/2019
感谢您的快速回复!!我将尝试此代码并检查它是如何工作的。
0赞 petrov peter 1/15/2019
它没有...也许我添加的代码中有一些错误。我在上面的问题帖子中描述了我写的内容。
0赞 TanvirArjel 1/15/2019
你能通过团队查看器分享你的屏幕吗?
0赞 petrov peter 1/15/2019
哦!我发现了一种有点肮脏的方法来仅使用内置的 reqiured 属性来解决我的问题!!等我下班回来后再和你分享:)