![](/img/trans.png)
[英]c# asp.net core mvc passing data from view to controller and from controller back to view
[英]ASP.net Core MVC 2.0 Passing FormEditModel from view to controller
您好,我正在为学校项目使用Microsoft asp.net MVC Core 2.0做一个简单的博客,并且在为Articles实施CRUD操作时遇到了问题。 更准确地说,我只有编辑文章方法有问题。 这是我的控制器方法
[HttpPost]
[ValidateModelState]
public async Task<IActionResult> EditArticle(ArticleEditServiceModel parameter)
{
parameter.Title = this.html.Sanitize(parameter.Title);
parameter.Content = this.html.Sanitize(parameter.Content);
//var user = this.userManager.GetUserName(User.Identity.Name)
await this.articles.EditAsync(parameter.Id, parameter.Title, parameter.Content);
return RedirectToAction(nameof(Index));
}
这是我的服务“ EditAsync”方法:
public async Task<bool> EditAsync(int id, string title, string content)
{
var article = await this.db.Articles.Where(a => a.Id == id).FirstOrDefaultAsync();
if (article == null)
{
return false;
}
article.Title = title;
article.Content = content;
await this.db.SaveChangesAsync();
return true;
}
风景:
@model ArticleEditServiceModel
@{
ViewData["Title"] = "Edit Article";
}
<h2>@ViewData["Title"]</h2>
<div class="row">
<div class="col-md-4">
<form asp-controller="Article" asp-action="EditArticle" asp-route-parameter=@Model method="post">
<div class="form-group">
<label asp-for="Title"></label>
<input asp-for="Title" class="form-control" />
<span asp-validation-for="Title" class="form-text text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Content"></label>
<input asp-for="Content" required class="form-control" />
<span asp-validation-for="Content" class="form-text text-danger"></span>
</div>
<a asp-controller="Article" asp-action="Index" class="btn btn-default">Back</a>
<button type="submit" formmethod="post" class="btn btn-success">Edit Article</button>
</form>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
}
它通过ID查找正确的文章,并给了我两个可以在其中编辑文本的输入字段,但是当我单击“提交”按钮时,没有对文章应用任何更改。 我尝试调试,发现该视图将空模型发送到控制器的post方法。 我似乎找不到代码有什么问题,所以我认为我应该向更有经验的开发人员寻求帮助。
我尝试调试,发现该视图将空模型发送到控制器的post方法。
我相信该视图会发送正确的请求,但是在服务器端进行模型绑定时会发生错误。
要解决此问题,您应该在控制器操作中为ArticleEditServiceModel
参数添加[FromBody]
属性:
public async Task<IActionResult> EditArticle([FromBody] ArticleEditServiceModel parameter)
FromBody
属性指示ASP.NET Core框架应该使用基于Content-Type
http标头的媒体类型格式化程序从请求正文中反序列化操作参数。 请查看本文以获取详细信息,它说明了ASP.NET MVC和ASP.NET Core MVC之间的模型绑定的区别。
您应该从将模型直接发送到EditArticle的形式cuz中取出asp-route-id=@Model.Id。 创建一个输入type =“ hidden” asp-for =“ Id” class =“ form-control”即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.