Saya mencoba membuat tindakan edit menggunakan DI.

Saya menggunakan mengelola View untuk mengedit atau menghapus objek.

ipost antarmuka:

using collector_forum.Data.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace collector_forum.Data
{
    public interface IPost
    {
        Post GetById(int id);
        IEnumerable<Post> GetAll();
        IEnumerable<Post> GetFilteredPosts(int id, string searchQuery);
        IEnumerable<Post> GetFilteredPosts(string searchQuery);
        IEnumerable<Post> GetPostsByCategory(int id);
        IEnumerable<Post> GetLatestPosts(int n);


        Task Add(Post post);
        Task Delete(int id);
        void Update(Post post);

        Task AddReply(PostReply reply);
    }
}

PostService Update Metode:

public void Update(Post post)
        {
            _context.Posts.Update(post);
            _context.SaveChanges();
        }

PostController Edit Dapatkan dan Posting Aksi:

public IActionResult Edit(int postId)
        {
            Post postt = _postService.GetById(postId);
            return View(postt);
        }

[HttpPost]
        public IActionResult Edit(Post post)
        {
            _postService.Update(post);
            return RedirectToAction("Manage");
        }

Posting Model yang update dan Edit Metode mengacu pada:

using System;
using System.Collections.Generic;

namespace collector_forum.Data.Models
{
    public class Post
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public DateTime Created { get; set; }

        public virtual ApplicationUser User { get; set; }

        public virtual Category Category { get; set; }

        public virtual IEnumerable<PostReply> Replies { get; set; }
    }
}

Ini adalah Edit Lihat:

@model collector_forum.Data.Models.Post

@{
    ViewData["Title"] = "Edit Post";
}
<div class="container body-content">
    <div class="row sectionHeader">
        <div class="sectionHeading">New Post</div>
        <div class="sectionDescription">
            <p>
                Please read the Forum Guidelines before creating a new post.

                @if (!Context.User.Identity.IsAuthenticated)
                {
                    <span>You must be a <a asp-controller="Account" asp-action="Register">registered member</a> to create a new post.</span>}
            </p>
        </div>
        @if (Context.User.Identity.IsAuthenticated)
        {
            <div class="createPost">
                <div class="row createPost">
                    <div class="createPostSection">
                        <div class="authorBlock">
                            You're submitting this post as <strong>@Model.User.UserName</strong>
                        </div>
                        <form asp-action="Edit" method="post" id="addPostForm">
                            <div class="form-group">
                                <label asp-for="Title"></label>
                                <input asp-for="Title" class="form-control" />
                            </div>
                            <div class="form-group">
                                <label asp-for="Content"></label>
                                <input asp-for="Content" class="form-control" />
                            </div>
                            <button type="submit" id="submitPostBtn" class="btn btn-submitPost">
                                Edit Post
                            </button>
                            <input asp-for="Category.Id" type="hidden" />
                        </form>
                    </div>
                </div>
            </div>
        }
    </div>
</div>

Saya ikuti ini tutorial dan tidak bisa mengganti postid - itu Membuat ID baru, dan tidak dapat melewati nilai-nilai yang tidak diedit seperti userid / username.

Ketika saya mengkonfirmasi posting yang diedit, saya mendapatkan nullreferencexception dari basis data - errorpage

Dan ini adalah tampilan tabel saya setelah "perubahan" - c# asp.net-core asp.net-core-mvc parameter-passing nullreferenceexception

-2
Piotr 4 April 2021, 19:04

1 menjawab

Jawaban Terbaik

Anda tidak lulus UserID ke Edit Aksi ketika Anda memposting formulir Anda, jadi ketika Anda memperbarui Post post, userid akan null. Anda dapat menambahkan input tersembunyi dengan bentuk tampilan edit:

<input asp-for="User.Id" type="hidden" />

Sehingga Anda akan memiliki ID pengguna di Post post dari tindakan edit Anda. Dan maka Anda dapat menyimpannya ke db.

1
Yiyi You 5 April 2021, 03:21