EditorFor中的ASP MVC字段验证

时间:2014-09-18 15:52:47

标签: c# asp.net-mvc asp.net-mvc-4

我有一个表单,模型的一个字段很复杂,所以我为该字段创建了一个自定义编辑器。 以下是主要表单中编辑器的一部分:

<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>

此外,我应该提到主要表单位于部分内容中,TranslationNameTranslationDescription是2个必填字段(并在ViewModel中使用[Required]进行注释) @Html.ValidationMessage返回所需的字段消息,文本框为空。

我的问题是translationDescriptionValidtranslationNameValid始终为true,当字段为空时,它们应返回false。 我已经成功地以其他形式使用了这种方法。

我在这里做错了什么?

0 个答案:

没有答案