0

私のモデルにはコレクションが含まれています:

public ICollection<int> ChildAges { get; set; }

これは、追加できる年齢の動的なリストです。これはすべて JQuery を介して制御されます。

私に与える

<select name="ChildAges">...</select>
<select name="ChildAges">...</select>
<select name="ChildAges">...</select>
etc...

標準属性を追加するRequiredと、コレクション内のいずれかの値が設定されている場合、検証は true を返します。

フォーム内のすべてが設定されていることを確認するにはどうすればよいChildAgesですか?

4

1 に答える 1

0

新しいカスタムIClientValidatable属性を作成しました:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class MultipleRequiredValuesAttribute : RequiredAttribute, IClientValidatable
    {
        #region IClientValidatable Members

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var clientValidationRule = new ModelClientValidationRule()
            {
                ErrorMessage = base.ErrorMessage,
                ValidationType = "multiplerequiredvalues"
            };

            return new[] { clientValidationRule };
        }

        #endregion
    }

これを私のモデルに適用しました:

[DisplayName("Ages(s)")]
        [MultipleRequiredValues(ErrorMessage = "You must provide ages for all children in all rooms")]
        public ICollection<int> ChildAges { get; set; }

次に、JQuery 側を追加します。

(function ($) {

    $.validator.addMethod('multiplerequiredvalues', function (value, element) {
        if ($(element).is(':visible')) {
            var returnVal = true;
            var name = $(element).attr('name');
            var elements;
            if ($(element).is('input')) {
                elements= $('input[name='+name+']');
            }
            else
            {
                elements= $('select[name='+name+']');
            }
            elements.each(function() {
                if ($(this).is(':visible'))
                {
                    returnVal = $(this).val() != "" && $(this).val() != null;
                }
            });
            return returnVal;
        }
        else {
            return true;
        }
    });
    $.validator.unobtrusive.adapters.addBool("multiplerequiredvalues");
} (jQuery));

要素が表示されていない場合、これも true を返すことに注意してください

于 2012-09-04T15:32:08.653 に答える