C# 与子模型的模型绑定

C# 与子模型的模型绑定,c#,asp.net-mvc,forms,model-binding,C#,Asp.net Mvc,Forms,Model Binding,我有一个模型如下: public class RegisterModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] public string Password { get; set; } public virtual Department

我有一个模型如下:

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

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

    public virtual Department Department { get; set; }

}
以下是控制器操作:

    [AllowAnonymous]
    public ActionResult Register(int departmentId)
    {
        using (var db = new DataContext())
        {
            var department = db.Departments.Find(departmentId);

            var registerModel = new RegisterModel {Department = department};

            return View(registerModel);
        } 
    }
我有部门列表页。比如Foo,那么我想把用户变成Foo

1 . Foo - add user
然后我有一个注册视图

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    @Html.HiddenFor(x => x.Department.Id)


    <fieldset>
        <legend>Registration Form</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.UserName)
                @Html.TextBoxFor(m => m.UserName)
            </li>
            <li>
                @Html.LabelFor(m => m.Password)
                @Html.PasswordFor(m => m.Password)
            </li>

        </ol>
        <input type="submit" value="Register" />
    </fieldset>
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
@Html.HiddenFor(x=>x.Department.Id)
登记表
  • @LabelFor(m=>m.UserName) @Html.TextBoxFor(m=>m.UserName)
  • @LabelFor(m=>m.Password) @Html.PasswordFor(m=>m.Password)
  • }
    现在我的问题是如何将部门绑定到模型?有部门Id吗?还是部门目标


    我有权访问我从数据库填充的部门,然后我需要将其传递给视图。但是我怎么通过呢?因此,在注册提交后,我可以访问它或它的id?

    您应该在您的
    注册模型中添加
    部门id
    部门列表

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }
    
        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
    
        public int DepartmentId { get; set; }   
    
        // You don't really need this.
        //public virtual Department Department { get; set; }
    
        // Create this list in your controller before sending it to the view.
        public IEnumerable<SelectListItem> DepartmentsList { get; set; }
    }
    
    [HttpPost]
    public ActionResult Register(RegisterModel registerModel)
    {
        using (var db = new DataContext())
        {
            // Note: this is just an example..
            var user = new User
            {
                UserName = registerModel.UserName,
                Password = registerModel.Password,
                DepartmentId = registerModel.DepartmentId
            }
    
            db.Users.Add(user);
            db.SaveChanges();
        }
    }
    
    然后在视图中创建一个下拉列表:

    <li>
        @Html.LabelFor(m => m.Department)
        @Html.DropDownListFor(m => m.DepartmentId, Model.DepartmentsList)
    </li>
    

    您应该将
    DepartmentId
    DepartmentsList
    添加到您的
    RegisterModel

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }
    
        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
    
        public int DepartmentId { get; set; }   
    
        // You don't really need this.
        //public virtual Department Department { get; set; }
    
        // Create this list in your controller before sending it to the view.
        public IEnumerable<SelectListItem> DepartmentsList { get; set; }
    }
    
    [HttpPost]
    public ActionResult Register(RegisterModel registerModel)
    {
        using (var db = new DataContext())
        {
            // Note: this is just an example..
            var user = new User
            {
                UserName = registerModel.UserName,
                Password = registerModel.Password,
                DepartmentId = registerModel.DepartmentId
            }
    
            db.Users.Add(user);
            db.SaveChanges();
        }
    }
    
    然后在视图中创建一个下拉列表:

    <li>
        @Html.LabelFor(m => m.Department)
        @Html.DropDownListFor(m => m.DepartmentId, Model.DepartmentsList)
    </li>
    

    您可以在将此视图返回给用户的位置显示控制器/操作结果吗?好的,我已将其添加到问题中,您可以将其放在视图中的某个位置:@Model.Department.Id

    ?这应该只是显示部门ID。我不太明白问题是什么?它确实显示了。当我提交时,我不会返回部门。您是在尝试创建一个新部门,还是正在将现有部门发送回您的视图?您是否可以在将此视图返回给用户的位置显示控制器/操作结果?好的,我将其添加到问题中。您是否可以将其放在视图中的某个位置:@Model.department.Id

    ?这应该只是显示部门ID。我不太明白问题是什么?它确实显示了。当我提交时,我不会返回部门。您是在尝试创建新部门,还是将现有部门发送回视图?