Asp.net mvc 4 asp.net mvc4创建子窗体以在注册期间为用户添加多个地址

Asp.net mvc 4 asp.net mvc4创建子窗体以在注册期间为用户添加多个地址,asp.net-mvc-4,one-to-many,subform,Asp.net Mvc 4,One To Many,Subform,在我的asp.net mvc4应用程序中,我希望允许用户在注册期间向其帐户添加多个地区和城市。我想添加一些子表单,其中将是地区和城市的下拉列表,用户应该能够在注册过程中添加多个地区和城市。我知道如何使用jquery实现这一点,但我想使用视图模型进行验证和创建此注册表,但我不知道如何创建此视图模型以及如何在视图中定义此表单。我正在说明我当前的注册视图模型,我想问你是否可以帮助我修改它,以便它可以根据我的需要工作 public class RegisterUserModel { [Requi

在我的asp.net mvc4应用程序中,我希望允许用户在注册期间向其帐户添加多个地区和城市。我想添加一些子表单,其中将是地区和城市的下拉列表,用户应该能够在注册过程中添加多个地区和城市。我知道如何使用jquery实现这一点,但我想使用视图模型进行验证和创建此注册表,但我不知道如何创建此视图模型以及如何在视图中定义此表单。我正在说明我当前的注册视图模型,我想问你是否可以帮助我修改它,以便它可以根据我的需要工作

public class RegisterUserModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    public string ConfirmPassword { get; set; }

    [Required]
    [Display(Name = "Email")]
    public string Email { get; set; }

}

谢谢。

您需要向视图模型添加一个集合,其中包含区域和城市。您应该创建另一个类型来封装这两个属性,例如Place,这样您的视图模型将如下所示:

public class RegisterUserModel
{
    // other properties

    public List<Place> Places { get; set; }

}

public class Place
{
    public string Region { get; set; }

    public string City { get; set; }
}
<input name="Places[0].Region" />
<input name="Places[0].City />

集合中的下一个位置是
[1]
等等。由于您熟悉jQuery,我将跳过如何将它们添加到DOM。

Thank you@渐近故障我不知道这个索引“技巧”,我有一个小问题,因为我是asp新手。是否可以对至少需要一个项目的位置创建约束?@mark_ello我不确定是否有内置的验证属性可以应用于集合,以确保至少有一个项目;有趣的是,如果应用
Required
属性可以做到这一点,我怀疑它会起作用,但尝试一下也没有坏处。通过扩展
ValidationAttribute
并重写
IsValid
方法,始终可以创建自定义验证属性。在该方法中,您可以检查集合中是否至少有一项,如果没有,则返回错误消息。如果你环顾四周,应该会有很多创建自定义验证属性的示例。我只想问最后一个问题,是否可以更改和@mark_ello。只需简单地使用
@Html.TextBoxFor(m=>m.Places[n].Region)
其中
n
是您想要的索引,即0、1、2等。我尝试了这个方法,但不幸的是,我遇到了这个错误:错误1无法将[]索引应用于“System.Collections.Generic.IEnumerable”类型的表达式。您能帮我解决这个问题吗。很抱歉打扰您,但我无法找到澳新银行关于这个问题的其他话题。