This is my view
<div id="Domain">
<ul class="formlist">
<li class="width100">
<div class="form-check form-check-inline">
<label class="form-check-label">
@Html.RadioButtonFor(model => model.domain_flag, 1, new { @class = "form-check-input" }) <span>Yes</span>
</label>
</div>
<div class="form-check form-check-inline">
<label class="form-check-label">
@Html.RadioButtonFor(model => model.domain_flag, 0, new { @class = "form-check-input", @checked = "checked" }) <span>No</span>
</label>
</div>
</li>
</ul>
<ul class="formlist">
<li>
<div class="frm-marg-b">
<label class="label"><b>@Html.LabelFor(model => model.domain_renew_date)</b></label>
<div class="textbx">
<div class="input-group">
@Html.TextBoxFor(model => model.domain_renew_date, new { @type = "datetime", @class = "form-control" })
@Html.ValidationMessageFor(model => model.domain_renew_date, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="frm-marg-b">
<label class="label"><b>@Html.LabelFor(model => model.domain_vendor_id)</b></label>
<div class="textbx">
@Html.DropDownListFor(model => model.domain_vendor_id, Model.domain_Vendor, "Please Select")
@Html.ValidationMessageFor(model => model.domain_vendor_id, "", new { @class = "text-danger" })
</div>
</div>
</li>
<li>
<div class="frm-marg-b">
<label class="label"><b>@Html.LabelFor(model => model.domain_exp_date)</b></label>
<div class="textbx">
<div class="input-group">
@Html.TextBoxFor(model => model.domain_exp_date, new { @type = "datetime", @class = "form-control" })
@Html.ValidationMessageFor(model => model.domain_exp_date, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="frm-marg-b">
<label class="label"><b>@Html.LabelFor(model => model.domain_amt)</b></label>
<div class="textbx">
@Html.EditorFor(model => model.domain_amt, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.domain_amt, "", new { @class = "text-danger" })
</div>
</div>
</li>
<li class="width100">
<div class="frm-marg-b">
<label class="label"><b>@Html.LabelFor(model => model.domain_remarks)</b></label>
<div class="textbx3">
@Html.TextAreaFor(model => model.domain_remarks, new { htmlAttributes = new { @class = "form-control", @rows = 2 } })
@Html.ValidationMessageFor(model => model.domain_remarks, "", new { @class = "text-danger" })
</div>
</div>
</li>
</ul>
</div>
My model
public int? domain_flag { get; set; }
[Display(Name = "Date of Renewal")]
[DataType(DataType.Date)]
[RequiredIf("domain_flag==1",ErrorMessage ="Enter Renew Date")]
public DateTime? domain_renew_date { get; set; }
[Display(Name = "Date of Expiry")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:mm/dd/yy}", ApplyFormatInEditMode = true)]
[RequiredIf("domain_flag==1", ErrorMessage = "Enter Expiry Date")]
public DateTime? domain_exp_date { get; set; }
[Display(Name = "Vendor")]
[RequiredIf("domain_flag==1", ErrorMessage = "Please Select Vendor")]
public int? domain_vendor_id { get; set; }
[Display(Name = "Amount(Rs.)")]
[RequiredIf("domain_flag==1", ErrorMessage = "Enter Amount")]
[RegularExpression("^[0-9]+$", ErrorMessage = "Enter Numeric Values")]
public decimal? domain_amt { get; set; }
[Display(Name = "Comments")]
public string domain_remarks { get; set; }
Global.asax
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(RequiredIfAttribute), typeof(RequiredIfValidator));
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(AssertThatAttribute), typeof(AssertThatValidator));
In this as soon as I select the radio button the required if error messages are displayed before entering the values. The error messages should be displayed on click of submit button before posting to the server. Is this possible with expressive annotations nuget package?
Yes it's possible with ExpressiveAnnotations.
@jwaliszko mentioned it.
You have to set the configuation of ea like this at client-side:
<script>
ea.settings.dependencyTriggers = '';