我正在收集
<AppUser>
其他对象中的对象
Project
反对。
我的模型:
public class Project
{
public int ProjectID { get; set; }
[Required(ErrorMessage = " Please enter a project name")]
public string Name { get; set; }
[Required(ErrorMessage = " Please enter a project description")]
public string Description { get; set; }
//HERE'S MY COLLECTION OF <APPUSER> OBJECTS
public virtual ICollection<AppUser> ProjectManagers { get; set; }
}
在我看来,我需要一封与
<应用程序用户>
添加到此列表中。以下是与此视图关联的ViewModel:
public class AddProjectManagerViewModel
{
[Required]
[EmailAddress(ErrorMessage = "Please ensure email is valid")]
[UIHint("email")]
public string Email { get; set; }
public int ProjectID { get; set; }
}
以及观点:
@model AddProjectManagerViewModel
@{
ViewBag.Title = "Add PM";
Layout = "_Layout";
}
<div class="col-xs-12 buffer">
<div class="text-center">
<h3>Enter the new Project Manager's email:</h3>
</div>
<div><span asp-validation-for="Email" class="text-danger"></span></div>
<form asp-action="AddProjectManager">
<div class="form-group">
<label asp-for="Email"></label>
<input asp-for="Email" class="form-control" />
</div>
<div class="text-center">
<button class="btn btn-primary" asp-route-projectId="@Model.ProjectID" type="submit">Add to PMs</button>
</div>
</form>
</div>
在我的控制器中,我有post方法。问题是,
List<AppUser>
没有坚持并且出现了
null
每次调用action方法时:
[HttpPost]
[Authorize]
public async Task<IActionResult> AddProjectManager(int projectId, string email)
{
var pmToAdd = await userManager.FindByEmailAsync(email);
if (pmToAdd != null)
{
var proj = repository.Projects.FirstOrDefault(p => p.ProjectID == projectId);
if(proj != null)
{
//HERE proj.ProjectManagers IS ALWAYS NULL EVEN IF THIS METHOD HAS BEEN PREVIOUSLY CALLED SUCCESSFULLY
if(proj.ProjectManagers == null) { proj.ProjectManagers = new List<AppUser>(); }
proj.ProjectManagers.Add(pmToAdd);
TempData["message"] = $"{pmToAdd.Email} added to {proj.Name} Project Managers";
return View("Edit", proj );
}
TempData["message"] = $"Error finding project in database.";
return View();
}
TempData["message"] = $"User not found. Ensure that email is linked to a registered user";
return View();
}
我应该如何设置这种方法来使模型
public virtual ICollection<AppUser> ProjectManagers { get; set; }
坚持不懈?
编辑
以下是我的存储库方法:
public void AddProjectManager(int projectID, AppUser user)
{
Project proj = context.Projects.FirstOrDefault(p => p.ProjectID == projectID);
if(proj != null)
{
proj.ProjectManagers.Add(user);
context.SaveChanges();
}
}
我也变了
proj.ProjectManagers.Add(pmToAdd);
到
repository.AddProjectManager(projectId, pmToAdd);
在行动方法中,但是
List<AppUser>' is still
每次调用时为空