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。我不太明白问题是什么?它确实显示了。当我提交时,我不会返回部门。您是在尝试创建新部门,还是将现有部门发送回视图?