Asp.net core mvc ASP.NET核心MVC视图报表模型类没有新属性的定义

Asp.net core mvc ASP.NET核心MVC视图报表模型类没有新属性的定义,asp.net-core-mvc,Asp.net Core Mvc,我正在从事一个ASP.NET核心MVC项目(v.1.0.0)。它当前已发布到暂存和生产环境。最近更新了一个模型类,以添加两个新属性 在开发和登台环境中,这些新属性都可以正常工作 但是,当部署到生产环境时,引用这些新属性的视图报告它们未在类中定义。生产中: 1) 实体框架能够成功地实现迁移,并基于更新的类更新数据库模式 2) 控制器可以与这些新属性交互,甚至可以保存到数据库 3) 但是,当为同一类使用强类型视图时,会抛出一个错误,指出位置不包含纬度定义 同样,在开发和登台环境中,相同的视图可以很好

我正在从事一个ASP.NET核心MVC项目(v.1.0.0)。它当前已发布到暂存和生产环境。最近更新了一个模型类,以添加两个新属性

在开发和登台环境中,这些新属性都可以正常工作

但是,当部署到生产环境时,引用这些新属性的视图报告它们未在类中定义。生产中:

1) 实体框架能够成功地实现迁移,并基于更新的类更新数据库模式

2) 控制器可以与这些新属性交互,甚至可以保存到数据库

3) 但是,当为同一类使用强类型视图时,会抛出一个错误,指出位置不包含纬度定义

同样,在开发和登台环境中,相同的视图可以很好地处理新属性

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");}
}
@model MyMvcApp.Models.Location
@{
ViewData[“Title”]=“添加位置”;
}

@节脚本{ @{wait Html.RenderPartialAsync(“_validationScript”);} }
当我删除或注释掉对新属性的引用时,视图呈现良好


有什么办法可以纠正吗?

在这种情况下,视图的行为与控制器不同,因为它们是在运行时而不是在构建时编译的

在我的例子中,早期版本的dll仍然位于托管服务器上的一个单独位置。我的猜测是,它是以前尝试回滚时留下的。无论如何,主机上仍然可以使用较旧版本的dll,并且在编译视图创建行为时可以访问该dll

理想情况下,我应该能够删除过时的dll(和任何相关文件)并重新启动应用程序服务。不幸的是,我很难找到这个dll,所以我选择了一个不太理想的路径

为了纠正这一点,我在发布后的部署设置中设置了“在目标位置删除其他文件”复选框。


注意:与项目部署分离的任何生成或上载到web服务器的文件也将被删除。如果其中任何一个存在,则需要重新生成或上载它们。

您的模型类与控制器和视图在其他库中还是在同一个web项目中?它与控制器和视图在同一个项目中。您确定新dll正确生成并正确部署到生产环境中。@dotnetstep似乎是,但我不确定。之后,我进行了大量构建,并在没有任何更改的情况下进行了部署。我甚至在部署之前尝试了清理和重建,但没有任何更改。在我看来,您的dll没有更新,或者正在从缓存或其他地方引用。如果可能,尝试回收应用程序池。