В настоящее время у меня проблема с NullException.Я получаю сообщение об ошибке на @comment.ApplicationUser.UserName
внизу, , но только если я получаю доступ к комментарию, который был опубликован другим пользователем, а не тем, кто загрузил изображение.Если я прокомментирую ту же фотографию, которую опубликовал пользователь (я), она правильно отображает имя пользователя. Я действительно не знаю, в чем может быть проблема, поскольку, если я вызываю @comment.ApplicationUserId
, все работает так, как должно отображать идентификатор пользователя.пользователь, который разместил изображение.Разве он не должен быть автоматически связан с объектом ApplicationUser, когда я вызываю @comment.ApplicationUser.UserName
?
Представление, в котором я получаю сообщение об ошибке
@foreach (var comment in Model.Comments)
{
<dd class="font-italic">
@comment.Body commented by @comment.ApplicationUser.UserName
</dd>
}
Модель комментария
public class Comment
{
public int Id { get; set; }
public string Body { get; set; }
public bool ApprovedByUser { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public string ApplicationUserId { get; set; }
public Photo Photo { get; set; }
public int PhotoId { get; set; }
}
Каждый раз, когда я создаю новый комментарий в CommentsController / Create Я делаю это
public ActionResult Create([Bind(Include = "Id,Body,ApprovedByUser,ApplicationUserId,PhotoId")] Comment comment, int id)
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var currentUser = userManager.FindById(User.Identity.GetUserId());
comment.PhotoId = id;
comment.ApplicationUserId = currentUser.Id;
if (ModelState.IsValid)
{
db.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.PhotoId = new SelectList(db.Photos, "Id", "Title", comment.PhotoId);
return View(comment);
}
У меня также естьпользовательский PhotoCommentsViewModel , содержащий фотографию и комментарии к этой фотографии.
public class PhotoCommentsViewModel
{
public Photo Photo { get; set; }
public IEnumerable<Comment> Comments { get; set; }
}
Я получаю abobe viewModel из Photo / Details / {id} контроллера здесь
public ActionResult Details(int? id)
{
var photo = db.Photos.Find(id);
var comments = db.Comments.Where(s => s.PhotoId == photo.Id);
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var viewModel = new PhotoUserViewModel
{
Photo = photo,
Comments = comments,
};
if (viewModel.Photo == null)
{
return HttpNotFound();
}
return View(viewModel);
}