我有這種多次使用的表單類'值','最大'字段只在某些情況下使用。如果'Show'屬性爲true並且顯示'Maximum'字段,我需要驗證'Maximum'是否有值。提前致謝!MVC5中的多重驗證要求
型號:
public class Value
{
public bool Show { get; set; }
public bool Required { get; set; }
[RequiredIf("Show", Domain.Comparison.IsEqualTo, true, ErrorMessageResourceType = typeof(Resources.ErrorMessages), ErrorMessageResourceName = "AuthorLabelIsRequired")]
public string Label { get; set; }
public string Description { get; set; }
[RequiredIf("Show", Domain.Comparison.IsEqualTo, true, ErrorMessageResourceType = typeof(Resources.ErrorMessages), ErrorMessageResourceName = "AuthorLabelIsRequired")]
public int? Maximum { get; set; }
}
HTML:
<tr>
<td>@Html.EnumString(Model.Data.DateSection.Key)</td>
<td>@Html.CheckBoxFor(m => m.Data.DateSection.Value.Show)</td>
<td>@Html.CheckBoxFor(m => m.Data.DateSection.Value.Required)</td>
<td>
@Html.TextBoxFor(m => m.Data.DateSection.Value.Label, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Data.DateSection.Value.Label)
</td>
<td>@Html.TextBoxFor(m => m.Data.DateSection.Value.Description, new { @class = "form-control" })</td>
<td></td>
</tr>
<tr>
<td>@Html.EnumString(Model.Data.DescriptionSection.Key)</td>
<td>@Html.CheckBoxFor(m => m.Data.DescriptionSection.Value.Show)</td>
<td>@Html.CheckBoxFor(m => m.Data.DescriptionSection.Value.Required)</td>
<td>
@Html.TextBoxFor(m => m.Data.DescriptionSection.Value.Label, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Data.DescriptionSection.Value.Label)
</td>
<td>@Html.TextBoxFor(m => m.Data.DescriptionSection.Value.Description, new { @class = "form-control" })</td>
<td>
@Html.TextBoxFor(m => m.Data.DescriptionSection.Value.Maximum, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Data.DescriptionSection.Value.Maximum)
</td>
</tr>
我的工作,解決此問題通過添加與''方法驗證布爾接口ICustomValidation'(ModelStateDictionary dict)'並添加一個在任何提供的'model'實例上調用'Validate'的預執行過濾器。每個模型中的Validate方法負責將條目移除(或添加)到ModelStateDictionary,最終確定模型是否有效。 – Dai
使用@Dai描述的方法很容易解決(儘管我不知道是否需要定製預執行過濾器,也許在舊版本中有),但是您是否嘗試過任何一種方法? 「問題」被問到的方式使得它聽起來像你只是要求某人爲你寫代碼。 –
嗯,我真的想知道是否有可能在上面的驗證聲明中有兩個條件。坦率地說,我是一個較新的程序員(2年),並不認爲答案會像戴made看起來那麼複雜。 –