在MVC 3中使用带有IEnumerable <string>的EditorFor

Jon*_*han 7 asp.net-mvc razor

我有一个包含字符串的IEnumerable,使用Data Annotations进行验证:

[Required(ErrorMessage = "This is required.")]
[Remote("IsValid", "ControllerName")]
public IEnumerable<string> MyList { get; set; }    
Run Code Online (Sandbox Code Playgroud)

我正在使用它与编辑器模板.这是我在视图中称之为的方式:

@Html.EditorFor(m => m.MyList)
Run Code Online (Sandbox Code Playgroud)

最后,我的模板采用了这个IEnumarable并为每个元素创建了许多表单元素:

@model IEnumerable<string>
@foreach (var str in Model)
{
    <li>
        @Html.LabelFor(m => str, "My Label")
        @Html.TextBoxFor(m => str)
        @Html.ValidationMessageFor(m => str)
    </li>
}
Run Code Online (Sandbox Code Playgroud)

即使表单元素确实正确呈现,我是否正确接近?此外,我注意到它不再验证.我该如何解决这个问题?

Kin*_*ake 7

你是以"正确"的方式去做的.(正确的说它可以工作,我以前做过这个)但是通过验证,我认为它不起作用的原因是这样,你有IEnemerable的验证而不是字符串.要对每个字符串进行验证.你必须创建一个新的模型对象说

public class LabelString
{
    [Required(ErrorMessage = "This is required.")]
    public string labelName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在哪里public IEnumerable<string> MyList { get; set; } 替换它public IEnumerable<LabelString> MyList { get; set; }

这应该可以让你对for循环中的每个标签进行验证.