System.InvalidOperationException при попытке использовать пользовательский атрибут проверки - PullRequest
2 голосов
/ 13 марта 2019

Я пытаюсь добавить флажок, который должен быть отмечен для прогресса, стандартную декларацию условий и положений.

Просматривая веб-страницы, все ответы на эту проблему являются разновидностью следующего кода:

[Display(Name = "This Is A Test")]
[MustBeTrue(ErrorMessage = "come on!")]
//[MustBeTrue(ErrorMessageResourceType = typeof(Res.Text), ErrorMessageResourceName = "ValidationMessage")]
//[Range(typeof(bool), "true", "true", ErrorMessage = "You gotta tick the box!")]
public bool TermsAndConditions { get; set; }

пользовательский атрибут выглядит так:

public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable
{
    public override bool IsValid(object value)
    {
        return value is bool && (bool)value;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
            ValidationType = "mustbetrue"
        };
    }
}

а затем что-то похожее на:

$.validator.unobtrusive.adapters.addBool("mustbetrue", "required");

На мой взгляд, я отображаю флажок так:

@Html.CheckBoxFor(m => m.TermsAndConditions, false)
@Html.LabelFor(m => m.TermsAndConditions)
@Html.ValidationMessageFor(m => m.TermsAndConditions)

Я пробовал множество вариантов этого, и я всегда получал одно и то же исключение:

System.InvalidOperationException
  HResult=0x80131509
  Message=The parameter conversion from type 'System.String' to type 'Nordics.Models.PolicyManagement.Affiliates.Affiliate' failed because no type converter can convert between these types.
  Source=System.Web.Mvc
  StackTrace:
   at System.Web.Mvc.ValueProviderResult.ConvertSimpleType(CultureInfo culture, Object value, Type destinationType)

Я в полной растерянности, кто-то может указать мне правильное направление? Благодаря.

1 Ответ

0 голосов
/ 14 марта 2019

Получается, что описанное не является проблемой.Я не совсем уверен, что за исключение на данный момент, но это было там задолго до нового кода проверки.Код проверки фактически работает должным образом, однако из-за того, как построен сайт, он пытается проверить модель, прежде чем мы сможем увидеть представление, и, таким образом, представление никогда не загружается, потому что флажок всегда начинается как ложный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...