ASP .NET Core模型绑定

时间:2020-07-17 23:18:08

标签: c# asp.net asp.net-core model-binding

我正在使用Visual Studio 16.4.6,并使用SDK 2.2在ASP .NET Web应用程序上工作。我的问题是在发出Submit之后,模型中的嵌入式对象被设置为null。这是一些细节。

class Photo {
    public int GardenId { get; set; }
    public string Filename { get; set; }
    public bool isDisplayed { get; set; }
}

class garden {
    public int Id { get; set; }
    public string Description { get; set; }
    public ICollection<Photo> Photos { get; set; }
}

传递到视图中(用于编辑目的)的模型是花园。当数据进入视图时,所有内容都会正确填充,包括具有值的ICollection Photos对象。该视图能够访问“照片”对象并显示关联的文件。但是,当按下提交按钮以处理更改时,传递回控制器方法的模型的Photos对象的值为空。本质上,将模型传递回控制器时,将删除Photos对象。其他花园对象属性随更新一起提供。即使仅按下“提交”按钮而没有编辑任何属性,也会发生相同的情况。任何建议,不胜感激。

1 个答案:

答案 0 :(得分:0)

该视图能够访问“照片”对象并显示关联的文件。但是,当按下“提交”按钮以处理更改时,传递回控制器方法的模型的Photos对象的值为空。

要解决以上问题,使发布的数据不能很好地绑定到属性,请使用浏览器F12开发人员工具“网络”工具检查发布的表单数据是否如下所示。

enter image description here

并且您可以参考以下代码段,以在表单中显示Photos的相关信息。

@model garden

@{
    ViewData["Title"] = "Edit";
    var Photos = Model.Photos.ToList();
}

<h1>Edit</h1>

<h4>garden</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Edit">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Id" class="control-label"></label>
                <input asp-for="Id" class="form-control" />
                <span asp-validation-for="Id" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Description" class="control-label"></label>
                <input asp-for="Description" class="form-control" />
                <span asp-validation-for="Description" class="text-danger"></span>
            </div>
            @for (int i = 0; i < Model.Photos.Count(); i++)
            {
                <input type="hidden" asp-for="@Photos[i].GardenId" />
                <div class="form-group">
                    <label asp-for="@Photos[i].Filename" class="control-label"></label>
                    <input asp-for="@Photos[i].Filename" class="form-control" />
                </div>
                <div class="form-group">
                    <label asp-for="@Photos[i].isDisplayed" class="control-label"></label>
                    <input asp-for="@Photos[i].isDisplayed" class="form-control" />
                </div>
            }
            <div class="form-group">
                <input type="submit" value="Save" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

测试结果

enter image description here

相关问题