7

我有一个 IEnumerable 包含字符串,使用数据注释进行验证:

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

然后我将它与编辑器模板一起使用。在我看来,这就是我所说的:

@Html.EditorFor(m => m.MyList)

最后,我的模板采用这个 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>
}

即使表单元素确实呈现正确,我是否正确地接近这个?另外,我注意到它不再有效。我该如何解决这个问题?

4

2 回答 2

7

您正在以“正确”的方式进行处理。(正确的是它可以工作,我以前做过)但是通过验证,我认为它不起作用的原因是,你在 IEnemerable 上而不是在字符串上进行验证。对每个字符串进行验证。你必须创建一个新的模型对象说

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

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

这应该让您验证 for 循环中的每个标签。

于 2012-08-27T02:54:57.423 回答
3

它不是数学,因此您的问题有不止一种解决方案,而且没有正确的解决方案。

说,但是,我宁愿以不同的方式处理它:

public class StringsViewModel
{
   IEnumerable<string> myList;
}

在你需要的视图中

@model StringsViewModel
@EditorForModel()

它将验证,因为您现在拥有强类型模型而不是通用模型。此外,您还可以节省foreach框架自动为您完成的循环......

希望这可以帮助。

于 2012-08-27T02:58:15.767 回答