【问题标题】:Model is null when form submitted to Action [duplicate]表单提交到操作时模型为空[重复]
【发布时间】:2020-04-14 02:01:30
【问题描述】:

我有一个简单的编辑页面。当我初始化编辑页面时,它工作正常(调用服务并将 ViewModel 正确绑定到文本框)。

但如果我想再次提交表单,它会在 Edit Action 方法中的 AlbumViewModel 中为我提供 null Album 对象。 (我添加了截图) 视图模型:

        public class AlbumViewModel
        {
            public Album Album { get; set; }
        }

行动:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Edit(AlbumViewModel album)
        {
            if (ModelState.IsValid)
            {
                this._albumService.UpdateAlbum(album);
            }
            return RedirectToAction("Index");
        }

cshtml:

@model Musicalog.Application.ViewModels.AlbumViewModel

@{
    ViewBag.Title = "Edit";
}
<h2>Edit</h2>

@using (Html.BeginForm(Html.BeginForm("Edit", null, FormMethod.Post, null)))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => Model.Album.AlbumID)
        @Html.HiddenFor(model => Model.Album.AlbumName)
        @Html.HiddenFor(model => Model.Album.Artist)
        @Html.HiddenFor(model => Model.Album.Stock)
        @Html.HiddenFor(model => Model.Album.Type)

        <div class="form-group">
            @Html.LabelFor(model => model.Album.AlbumName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Album.AlbumName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Album.AlbumName, "", new { @class = "text-danger" })
                @Html.HiddenFor(model => model.Album.AlbumName)

            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-success" />
            </div>
        </div>

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5 model-binding


    【解决方案1】:

    您使用的与模型相似的参数名称“专辑”。

            [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<ActionResult> Edit(AlbumViewModel model)
            {
                if (ModelState.IsValid)
                {
                    this._albumService.UpdateAlbum(model);
                }
                return RedirectToAction("Index");
            }
    

    您也可以从 html.BeginForm 中删除 null

    @using (Html.BeginForm(Html.BeginForm("Edit", null, FormMethod.Post)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2014-12-21
      相关资源
      最近更新 更多