Asp.net core mvc ASP.NET核心MVC视图报表模型类没有新属性的定义
我正在从事一个ASP.NET核心MVC项目(v.1.0.0)。它当前已发布到暂存和生产环境。最近更新了一个模型类,以添加两个新属性 在开发和登台环境中,这些新属性都可以正常工作 但是,当部署到生产环境时,引用这些新属性的视图报告它们未在类中定义。生产中: 1) 实体框架能够成功地实现迁移,并基于更新的类更新数据库模式 2) 控制器可以与这些新属性交互,甚至可以保存到数据库 3) 但是,当为同一类使用强类型视图时,会抛出一个错误,指出位置不包含纬度定义 同样,在开发和登台环境中,相同的视图可以很好地处理新属性 Location.csAsp.net core mvc ASP.NET核心MVC视图报表模型类没有新属性的定义,asp.net-core-mvc,Asp.net Core Mvc,我正在从事一个ASP.NET核心MVC项目(v.1.0.0)。它当前已发布到暂存和生产环境。最近更新了一个模型类,以添加两个新属性 在开发和登台环境中,这些新属性都可以正常工作 但是,当部署到生产环境时,引用这些新属性的视图报告它们未在类中定义。生产中: 1) 实体框架能够成功地实现迁移,并基于更新的类更新数据库模式 2) 控制器可以与这些新属性交互,甚至可以保存到数据库 3) 但是,当为同一类使用强类型视图时,会抛出一个错误,指出位置不包含纬度定义 同样,在开发和登台环境中,相同的视图可以很好
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");}
}
@model MyMvcApp.Models.Location
@{
ViewData[“Title”]=“添加位置”;
}
@节脚本{
@{wait Html.RenderPartialAsync(“_validationScript”);}
}
当我删除或注释掉对新属性的引用时,视图呈现良好
有什么办法可以纠正吗?在这种情况下,视图的行为与控制器不同,因为它们是在运行时而不是在构建时编译的 在我的例子中,早期版本的dll仍然位于托管服务器上的一个单独位置。我的猜测是,它是以前尝试回滚时留下的。无论如何,主机上仍然可以使用较旧版本的dll,并且在编译视图创建行为时可以访问该dll 理想情况下,我应该能够删除过时的dll(和任何相关文件)并重新启动应用程序服务。不幸的是,我很难找到这个dll,所以我选择了一个不太理想的路径 为了纠正这一点,我在发布后的部署设置中设置了“在目标位置删除其他文件”复选框。
注意:与项目部署分离的任何生成或上载到web服务器的文件也将被删除。如果其中任何一个存在,则需要重新生成或上载它们。您的模型类与控制器和视图在其他库中还是在同一个web项目中?它与控制器和视图在同一个项目中。您确定新dll正确生成并正确部署到生产环境中。@dotnetstep似乎是,但我不确定。之后,我进行了大量构建,并在没有任何更改的情况下进行了部署。我甚至在部署之前尝试了清理和重建,但没有任何更改。在我看来,您的dll没有更新,或者正在从缓存或其他地方引用。如果可能,尝试回收应用程序池。