我有一个表单,模型的一个字段很复杂,所以我为该字段创建了一个自定义编辑器。 以下是主要表单中编辑器的一部分:
<div class="form-group">
<label class="col-md-3 control-label">@i18n.Translations</label>
<div class="control-group col-md-9">
@Html.EditorFor(m => m.Translations)
</div>
</div>
以下是自定义编辑器:
@using XXX.i18n
@using XXX.ViewModels
@model XXX.ViewModels.ServiceTranslation
@{
bool translationNameValid = Html.ViewData.ModelState.IsValidField(Html.IdFor(m => m.TranslationName).ToString());
bool translationDescriptionValid = Html.ViewData.ModelState.IsValidField(Html.IdFor(m => m.TranslationDescription).ToString());
}
<div class="form-group">
@Html.HiddenFor(m => m.EntityLanguageId)
@Html.HiddenFor(m => m.Language)
@Html.HiddenFor(m => m.TranslationId.Left)
@Html.HiddenFor(m => m.TranslationId.Right)
<div class="col-md-6">
<div class="input-group @(translationNameValid ? null : "state-error")">
<span class="input-group-addon">@Model.Language</span>
@Html.TextBoxFor(m => m.TranslationName, new { @placeholder = i18n.Name, @class = "form-control" })
</div>
<div class="@(translationNameValid ? null : "state-error")">
<em for="@Html.IdFor(m => m.TranslationName)" class="invalid">@Html.ValidationMessage("TranslationName")</em>
</div>
</div>
<div class="col-md-6 @(translationDescriptionValid ? null : "state-error")">
@Html.TextBoxFor(m => m.TranslationDescription, new { @placeholder = i18n.Description, @class = "form-control" })
<em for="@Html.IdFor(m => m.TranslationDescription)" class="invalid">@Html.ValidationMessage("TranslationDescription")</em>
</div>
</div>
此外,我应该提到主要表单位于部分内容中,TranslationName
和TranslationDescription
是2个必填字段(并在ViewModel中使用[Required]
进行注释)
@Html.ValidationMessage
返回所需的字段消息,文本框为空。
我的问题是translationDescriptionValid
和translationNameValid
始终为true,当字段为空时,它们应返回false。
我已经成功地以其他形式使用了这种方法。
我在这里做错了什么?