3

私たちの MVC3 モデルには、このような文字列のコレクションが含まれています

[CannotBeEmpty(ErrorMessageResourceName = "ColorCodes", ErrorMessageResourceType = typeof(Resources.Strings))]
[Display(ResourceType = typeof(Resources.Strings), Name = "ColorCodes")]
public List<string> ColorCodes { get; set; }

を使用して、このモデルをビューに表示します

<div class="editor-field colors">
     @Html.EditorFor(model => model.ColorCodes)
     @Html.ValidationMessageFor(model => model.ColorCodes)
</div>

私の問題は、myValidationMessageFor が 1 行しかレンダリングしないのに対し、以下の例では、EditorFor が 3 つの入力フィールドをレンダリングすることです。

 <input class="text-box single-line" id="ColorCodes_0_" name="ColorCodes[0]" type="text" value="#d6c0d6">
 <input class="text-box single-line" id="ColorCodes_1_" name="ColorCodes[1]" type="text" value="">
 <input class="text-box single-line" id="ColorCodes_2_" name="ColorCodes[2]" type="text" value="#fcfcfc">
 <span class="field-validation-valid" data-valmsg-for="ColorCodes" data-valmsg-replace="true"></span>

ご覧のとおり、 data-valmsg-for には「ColorCodes」が含まれていますが、これは間違っています。ColorCodes_0_、ColorCodes_1_、および ColorCodes_2_ が含まれている必要があります。モデルにコレクションが含まれている場合、ValidationMessageFor をどのように使用すればよいですか。

4

1 に答える 1

3

モデルをforループで反復し、期待される結果を受け取ることができます。

@for(int i = 0; i < Model.ColorCodes.Count; i++)
{
   @Html.EditorFor(model => model.ColorCodes[i])
   @Html.ValidationMessageFor(model => model.ColorCodes[i])
}
于 2012-10-03T11:24:20.170 に答える