使用依赖注入编辑操作 ASP.Net Core MVC
Edit action with Dependency Injection ASP.Net Core MVC
我正在尝试使用 DI 进行编辑操作。
我正在使用 管理 查看以编辑或删除 objects。
我Post接口:
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);
}
}
Post服务更新方法:
public void Update(Post post)
{
_context.Posts.Update(post);
_context.SaveChanges();
}
Post控制器编辑 GET 和 POST 操作:
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");
}
Post 模型 Update 和 Edit 方法指的是:
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; }
}
}
这是我的编辑视图:
@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>
我遵循此 tutorial 并且无法替换 postId - 它正在创建新 ID,并且无法传递 non-edited 值,例如 userId/UserName.
当我确认编辑后 post 我从数据库中得到 NullReferenceException - errorpage
这是我table“改变”后的观点-DBtable
如何在不触及其他字段的情况下仅编辑此 post 的标题和内容?
如果您需要更多代码,请告诉我。
当你 post 你的表单时,你没有将 userId 传递给 Edit
操作,所以当你更新 Post post
时,UserId 将是 null.You 可以添加隐藏输入使用您的编辑视图表单:
<input asp-for="User.Id" type="hidden" />
这样您的编辑 Post post
中就会有用户 ID action.And 然后您可以将其保存到数据库中。
我正在尝试使用 DI 进行编辑操作。
我正在使用 管理 查看以编辑或删除 objects。
我Post接口:
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);
}
}
Post服务更新方法:
public void Update(Post post)
{
_context.Posts.Update(post);
_context.SaveChanges();
}
Post控制器编辑 GET 和 POST 操作:
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");
}
Post 模型 Update 和 Edit 方法指的是:
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; }
}
}
这是我的编辑视图:
@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>
我遵循此 tutorial 并且无法替换 postId - 它正在创建新 ID,并且无法传递 non-edited 值,例如 userId/UserName.
当我确认编辑后 post 我从数据库中得到 NullReferenceException - errorpage
这是我table“改变”后的观点-DBtable
如何在不触及其他字段的情况下仅编辑此 post 的标题和内容?
如果您需要更多代码,请告诉我。
当你 post 你的表单时,你没有将 userId 传递给 Edit
操作,所以当你更新 Post post
时,UserId 将是 null.You 可以添加隐藏输入使用您的编辑视图表单:
<input asp-for="User.Id" type="hidden" />
这样您的编辑 Post post
中就会有用户 ID action.And 然后您可以将其保存到数据库中。