我正在使用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对象。其他花园对象属性随更新一起提供。即使仅按下“提交”按钮而没有编辑任何属性,也会发生相同的情况。任何建议,不胜感激。
答案 0 :(得分:0)
该视图能够访问“照片”对象并显示关联的文件。但是,当按下“提交”按钮以处理更改时,传递回控制器方法的模型的Photos对象的值为空。
要解决以上问题,使发布的数据不能很好地绑定到属性,请使用浏览器F12开发人员工具“网络”工具检查发布的表单数据是否如下所示。
并且您可以参考以下代码段,以在表单中显示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");}
}
测试结果