如此简单,遗憾的是,这个新的身份系统不得不向我施加压力。
我想要做的就是在我的管理员中创建一个分配给用户的客户端项目。有关于如何让用户创建自己的东西的大量文档。但我需要让管理员只在这次创建。
页面加载但后来发布我得到这个错误,根据我读过的内容,在这种情况下没有任何意义," 没有类型'的类型的ViewData项目。 IEnumerable的'有关键' userId'。"我显然没有使用ViewData,它清楚地说是" userId"在下拉列表中。
该模型应该验证!
MODEL
public class ApplicationUser : IdentityUser
{
public virtual ICollection<ClientProject> ClientProjects { get; set; }
}
public class ClientProject
{
public int Id { get; set; }
[Display(Name = "Project")]
[Required(ErrorMessage = "A project name is required.")]
public string Name { get; set; }
// ForeignKey => dbo.IdentityUser
[Display(Name = "Client")]
[Required(ErrorMessage = "Please select a client account to associate with.")]
public virtual ApplicationUser User { get; set; }
}
CONTROLLER
// GET: /Admin/ClientProjects/Create
public ActionResult Create()
{
ViewBag.ProjectStatusId = new SelectList(Db.ProjectStatuses, "Id", "Name");
ViewBag.Users = new SelectList(UserManager.Users.ToList(),"Id", "UserName");
return View();
}
// POST: /Admin/ClientProjects/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include="Id,Name,ProjectStatusId")] ClientProject clientproject, string userId)
{
var client = UserManager.FindById(userId);
if (ModelState.IsValid)
{
clientproject.User = client;
Db.ClientProjects.Add(clientproject);
await Db.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.ProjectStatusId = new SelectList(Db.ProjectStatuses, "Id", "Name", clientproject.ProjectStatusId);
return View(clientproject);
}
查看
@Html.DropDownList("userId", (IEnumerable<SelectListItem>)ViewBag.Users, "--Select Client Account--", new { @class = "form-control" })
答案 0 :(得分:0)
ViewData是MVC's internal representation of your view model,它是一个键值字典,在尝试将传递给您分配给视图的模型的数据绑定到该词典时。因此,在您的情况下,由于您的userId
视图模型具有Users
属性并且这是预期的,因此不清楚Id
的可能性是多少。
基本上,这个MVC错误意味着“我在你的模型中寻找属性[空白]但却找不到它,因此我无法完成任务。”