【发布时间】:2016-11-15 04:14:01
【问题描述】:
我正在开发一个 ASP.NET Core MVC 项目 (v.1.0.0)。它目前已发布到登台和生产环境。最近更新了其中一个模型类以添加两个新属性。
在开发和暂存环境中,这些新属性都运行良好。
但是,当部署到生产环境时,引用这些新属性的视图报告它们未在类中定义。在生产中:
1) Entity Framework 能够成功实现迁移并根据更新的类更新数据库架构。
2) 控制器能够与这些新属性进行交互,甚至可以保存到数据库中。
3) 但是,当对同一类使用强类型视图时,会引发错误,指出 Location 不包含 Latitude 的定义。
同样,相同的视图可以很好地与开发和暂存环境中的新属性配合使用。
Location.cs
public class Location
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
[Display(Name = "Address Line 1")]
public string AddressLine1 { get; set; }
[Display(Name = "Address Line 2")]
public string AddressLine2 { get; set; }
[Required]
public string City { get; set; }
[Required]
public string State { get; set; }
[Required]
[Display(Name = "Postal Code")]
public int PostalCode { get; set; }
public double Latitude { get; set; } // New
public double Longitude { get; set; } // New
public string Notes { get; set; }
public Boolean IsActive { get; set; }
public Boolean IsDeleted { get; set; }
}
AddLocation.cshtml
我正在使用控制器从外部 API 获取提交时的纬度和经度,这就是为什么这些字段在 AddLocation 视图上被隐藏并默认为 0 的原因。用于更新或显示值的其他视图也会引发相同的错误。
@model MyMvcApp.Models.Location
@{
ViewData["Title"] = "Add Location";
}
<form asp-action="AddLocation">
<div class="form-horizontal">
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Latitude" value="0" />
<input type="hidden" asp-for="Longitude" value="0" />
<div class="form-group">
<label asp-for="Name" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="AddressLine1" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="AddressLine1" class="form-control" />
<span asp-validation-for="AddressLine1" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="AddressLine2" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="AddressLine2" class="form-control" />
<span asp-validation-for="AddressLine2" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="City" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="City" class="form-control" />
<span asp-validation-for="City" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="State" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="State" asp-items="@ViewBag.StateList" class="form-control"></select>
<span asp-validation-for="State" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="PostalCode" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="PostalCode" class="form-control" />
<span asp-validation-for="PostalCode" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
<input asp-for="IsActive" />
<label asp-for="IsActive"></label>
</div>
</div>
</div>
<div class="form-group">
<label asp-for="Notes" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Notes" class="form-control" />
<span asp-validation-for="Notes" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Add" class="btn btn-default" />
</div>
</div>
</div>
</form>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
当我删除或注释掉对新属性的引用时,视图渲染得很好。
有什么办法可以纠正这个问题吗?
【问题讨论】:
-
您的模型类是否在其他库或与 Controller 和 View 相同的 Web 项目中?
-
控制器和视图在同一个项目中。
-
您确定新的 dll 正确构建并正确部署到生产环境。
-
@dotnetstep 它似乎是,但我不确定。之后我进行了多次构建和部署,没有任何变化。我什至在部署之前尝试过清理和重建,但没有任何变化。
-
在我看来,您的 dll 未更新或被缓存或其他内容引用。如果可能,请尝试回收应用程序池。
标签: asp.net-core-mvc