Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证IEnumerable<;字符串>;MVC4中模型中的属性_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 如何验证IEnumerable<;字符串>;MVC4中模型中的属性

C# 如何验证IEnumerable<;字符串>;MVC4中模型中的属性,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个模型,它具有IEnumerable属性 public class SendEmailModel { [Required] [RegularExpression(Helper.DefaultEmailValidationPattern, ErrorMessageResourceName = "InvalidValue", ErrorMessageResourceType = typeof(i18n))] public IEnumerable<string>

我有一个模型,它具有IEnumerable属性

public class SendEmailModel
{
    [Required]
    [RegularExpression(Helper.DefaultEmailValidationPattern, ErrorMessageResourceName = "InvalidValue", ErrorMessageResourceType = typeof(i18n))]
    public IEnumerable<string> Recipients { get; set; }

    [RegularExpression(Helper.DefaultInputValidationPattern, ErrorMessageResourceName = "InvalidValue", ErrorMessageResourceType = typeof(i18n))]
    public string Subject { get; set; }
    ...
}
公共类SendEmailModel
{
[必需]
[RegularExpression(Helper.DefaultEmailValidationPattern,ErrorMessageResourceName=“InvalidValue”,ErrorMessageResourceType=typeof(i18n))]
公共IEnumerable收件人{get;set;}
[RegularExpression(Helper.DefaultInputValidationPattern,ErrorMessageResourceName=“InvalidValue”,ErrorMessageResourceType=typeof(i18n))]
公共字符串主题{get;set;}
...
}
鉴于

@using (Ajax.BeginForm("SendEmail", "Admin", new AjaxOptions { LoadingElementId = "loadingPane" }, new { id = "SendEmailForm"}))
{
    <div class="custom-validation-summary-errors"></div>

    <div>
        @Html.LabelFor(m => m.Recipients, i18n.To):
    </div>

    for (int i = 0; i < 10; i++)
    {
        <div>
            @Html.EditorFor(m => m.Recipients, "String")
        </div>
    }

    <div class="mt20">
        @Html.LabelFor(m => m.Subject, i18n.Subject):
    </div>
    <div>
        @Html.EditorFor(m => m.Subject, "String")
    </div>

   ...

   <input type="submit" value="Send"/>
}
@使用(Ajax.BeginForm(“sendmail”、“Admin”、新的AjaxOptions{LoadingElementId=“loadingPane”}、新的{id=“sendmailform”}))
{
@LabelFor(m=>m.Recipients,i18n.To):
对于(int i=0;i<10;i++)
{
@EditorFor(m=>m.Recipients,“String”)
}
@LabelFor(m=>m.Subject,i18n.Subject):
@EditorFor(m=>m.Subject,“字符串”)
...
}
但是在发布表单时,验证不起作用。发布后,我得到ModelState.IsValid-false

编辑: 我试图利用不引人注目的验证。主题验证正在进行(用户无法发布主题无效的表单)


for循环将被jquery添加/删除收件人所取代。

这只是一个想法,但是创建一个旁路属性怎么样

可能会做类似的事情

string RecipienctsCsv {
 get
 {
   return string.Join(', ', Recipiencts);
 }
}

然后再次说明,您没有显示足够的代码来验证这是否是您的选项。另一种选择是扩展HtmlHelper,使其适用于IEnumerable

您不能在
IEnumerable
类型化属性上使用验证数据注释。您可以按如下方式创建包装器类:

public class Recipient
{
    [RegularExpression(Helper.DefaultEmailValidationPattern, ErrorMessageResourceName = "InvalidValue", ErrorMessageResourceType = typeof(i18n))]
    public string EmailAddress { get; set; }
}
然后在主视图模型中

public class SendEmailModel
{
    [Required]
    public IEnumerable<Recipient> Recipients { get; set; }

    ...
}
现在,在绑定到
sendmailmodel
的主视图中,您可以执行以下操作:

@Html.EditorForModel
这将为每个属性创建一个编辑器。在本例中,属性的类型为
IEnumerable
,因此它将为该列表中的每个项目创建一个编辑器模板(如前面定义的)。所有验证都将自动应用


是一个类似的讨论。

您能发布完整的视图和操作吗?
@Html.EditorForModel