ASP.NET Core MVC 및 Identity를 사용하여 포럼 웹 앱을 만들려고합니다. 내 ForumPost
모델은 다음과 같습니다.
public class ForumPost
{
[Key]
public int PostId { get; set; }
[Required]
[MaxLength(32)]
public string PostName { get; set; }
[Required]
public string PostBody { get; set; }
[Required]
public IdentityUser User { get; set; }
}
나는 저장있어 IdentityUser
소식 테이블에, 그래서 여기에 사용자에 대한 외래 키에 의해 대체되는 Id
와 같은 설명은 사용자 테이블에 여기 . 내 컨트롤러의 Create
메소드는 다음과 같습니다.
public async Task<IActionResult> Create([Bind("PostId,PostName,PostBody")] ForumPost forumPost)
{
ModelState.Clear();
var user = await _userManager.GetUserAsync(User);
forumPost.User = user;
if (TryValidateModel(forumPost))
{
_context.Add(forumPost);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(forumPost);
}
그러나 Index.cshtml
에 제작자의 Username
을 표시하려고하면 비어 있습니다. 단축 된 .cshtml
.
@model IEnumerable<ForumPost>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.PostName)
</td>
<td>
@Html.DisplayFor(modelItem => item.User.UserName)
</td>
</tr>
}
내가 여기서 잘못하고 있습니까? 내가 무엇을 놓치고 있습니까? 감사!
원래 게시물에서는 ForumPost
에 지정된 외래 키를 사용하여 Users 테이블에서 IdentityUser
를 자동으로 ForumPost
의 User
필드가 채워 ForumPost
. 결국은 그렇지 않았으며 실제로 전체 사용자 세부 정보가 필요하지 않으며 사용자 이름 만 필요합니다.
따라서 ForumPost
코드를 다음과 같이 변경했습니다.
public class ForumPost
{
[Key]
public int PostId { get; set; }
[Required]
[MaxLength(32)]
public string PostName { get; set; }
[Required]
public string PostBody { get; set; }
[Required]
[ForeignKey("User")]
public string UserId { get; set; }
public IdentityUser User { get; set; }
}
다음 Index
작업에 액세스 할 수 있도록 UserId
추가했습니다. 데이터베이스에는 이미 Users 테이블을 가리키는 사용자 ID 외래 키가 있으므로 데이터베이스를 변경하지는 않습니다. 새로운 Index
작업은 다음과 같습니다.
public async Task<IActionResult> Index()
{
var posts = await _context.Posts.ToListAsync();
var postList = new List<PostIndexModel>();
foreach (var p in posts)
{
var userName = (from u in _context.Users
where u.Id.Equals(p.UserId)
select u.UserName).SingleOrDefault();
var post = new PostIndexModel()
{
PostId = p.PostId,
PostName = p.PostName,
UserName = userName
};
postList.Add(post);
}
return View(postList);
}
또한 몇 가지만 보여주는 새로운 PostIndexModel
보기 모델을 만들었습니다.
public class PostIndexModel
{
public int PostId { get; set; }
[Display(Name = "Post Name")]
public string PostName { get; set; }
[Display(Name = "Post Creator")]
public string UserName { get; set; }
}