Я изо всех сил пытаюсь завершить решение для проверки сервер-клиент для полусложного сценария. У меня есть основной тип под названием DateRange
:
public class DateRange {
public DateRange (DateTime? start, DateTime? end) { ... }
public DateTime? Start { get; private set; }
public DateTime? End { get; private set; }
}
У меня есть модель просмотра, например:
public class MyViewModel {
public DateRange Period { get; set; }
}
У меня есть %mvcproject%\Views\Shared\EditorTemplates\DateRange.cshtml, например:
@model MyCore.DateRange
@Html.Editor("Start", "Date")
@Html.Editor("End", "Date")
У меня также есть DateRangeModelBinder
для привязки двух входных данных формы к свойству DateRange
. У меня проблема с DateRangeRequiredAttribute
:
public class DateRangeRequired : ValidationAttribute, IClientValidatable,
IMetadataAware
{
private const string DefaultErrorMessage =
"{0} is required.";
public DateRangeRequired(bool endIsRequired = true)
: base(() => DefaultErrorMessage)
{
EndIsRequired = endIsRequired;
}
public bool EndIsRequired { get; set; }
public override bool IsValid(object value)
{
if (value == null)
{
return false;
}
if (!value.GetType().IsAssignableFrom(typeof(DateRange)))
{
throw new ArgumentException("Value is not a DateRange.");
}
var dateRange = value as DateRange;
return (dateRange.Start.HasValue && !EndIsRequired) ||
(dateRange.Start.HasValue && dateRange.End.HasValue && EndIsRequired);
}
public override string FormatErrorMessage(string name)
{
return string.Format(CultureInfo.CurrentCulture, ErrorMessageString, name);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule()
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "daterangerequired"
};
rule.ValidationParameters.Add("endisrequired", EndIsRequired.ToString().ToLower());
yield return rule;
}
public void OnMetadataCreated(ModelMetadata metadata)
{
metadata.DataTypeName = "DateRange";
}
}
Я не могу подключить его к двум входам. Это похоже на то, что должен быть ValidatorTemplate
, который сочетается с EditorTemplate из-за разделенных входных данных. Любые идеи? Дайте мне знать, если необходимы дополнительные разъяснения.