繁体   English   中英

ASP.net Core MVC 2.0将FormEditModel从视图传递到控制器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM