ApplicationUser.Username имеет значение null, хотя ApplicationUserId не является - PullRequest
0 голосов
/ 01 января 2019

В настоящее время у меня проблема с 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);
        }

Ответы [ 2 ]

0 голосов
/ 01 января 2019

В действии "Подробности" ApplicationUser необходимо загружать с комментариями.

var comments = db.Comments.Where(s => s.PhotoId == photo.Id).Include(x => x.ApplicationUser).ToList();

Дальнейшее чтение по Загрузка связанных объектов

0 голосов
/ 01 января 2019

В этом случае вы должны использовать готовую загрузку.

 var comments = db.Comments
                .Where(s => s.PhotoId == photo.Id)
                .Include(x =>x.ApplicationUser).ToList();

см. this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...