C# MVC模型在表单POST之后将null返回给控制器

C# MVC模型在表单POST之后将null返回给控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我的模型(CountryContinentModels)在发布表单后始终为空。 在我的控制器中,我总是得到模型null,我似乎找不到原因,我已经查看了代码好几次,询问了我的同学,并检查了其他几个堆栈溢出问题和答案,大多数时候这个问题与命名有关,我不认为这里是这种情况。 我正在尝试使用CountryContinental模型(has Country and Continental)在我的数据库中创建一个新条目 我正在设置积垢,我在设置CRUD时遇到了麻烦 以下是创建视图: @model T

我的模型(CountryContinentModels)在发布表单后始终为空。 在我的控制器中,我总是得到模型null,我似乎找不到原因,我已经查看了代码好几次,询问了我的同学,并检查了其他几个堆栈溢出问题和答案,大多数时候这个问题与命名有关,我不认为这里是这种情况。 我正在尝试使用CountryContinental模型(has Country and Continental)在我的数据库中创建一个新条目

我正在设置积垢,我在设置CRUD时遇到了麻烦

以下是创建视图:

    @model TransactionImporter.WebUI.Models.CountryContinentModels

    @{
    ViewBag.Title = "Create";
    }

    <h2>Create</h2>


    @using (Html.BeginForm()) 
    {
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>CountryContinentModels</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Country, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Country, new { htmlAttributes = new { @class = "form-control" } })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Continent, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Continent, new { htmlAttributes = new { @class = "form-control" } })
            </div>
        </div>
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default"/>
            </div>
        </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

当模型绑定发生时,它有助于理解ASP.NET创建模型所采取的步骤,特别是:

  • ASP.NET使用默认构造函数创建模型的实例
  • 如果有一个HTML输入具有匹配的
    名称
    ,则会调用每个属性的
    方法
  • 首先,您需要更改属性以设置public
    方法,如下所示:

    public string Continent { get; set; }
    

    这应该可以解决问题,但如果没有,您可以在HTML中检查生成的名称,以确保它们相对于C#属性的名称是有意义的。

    当模型绑定发生时,它有助于理解ASP.NET创建模型所采取的步骤,特别是:

  • ASP.NET使用默认构造函数创建模型的实例
  • 如果有一个HTML输入具有匹配的
    名称
    ,则会调用每个属性的
    方法
  • 首先,您需要更改属性以设置public
    方法,如下所示:

    public string Continent { get; set; }
    

    这应该可以解决问题,但如果没有,您可以检查HTML中生成的名称,以确保它们相对于C#属性的名称是有意义的。

    有任何错误/异常吗?没有,我添加了一个断点,以检查模型是否在控制器中正确返回,但如屏幕截图所示,它为null:该屏幕截图看起来返回的参数不是null?看起来好像是说一些属性返回null。您能将私有setter删除为普通setter并查看吗?让我们看看可见性是否是导致控制器不填充模型的原因?您是否可以删除模型中的构造函数并查看它是否有帮助?通常构造函数不能很好地使用模型绑定器。有错误/异常吗?没有,我添加了一个断点来检查模型是否在控制器中正确返回,但如屏幕截图所示,它是空的:该屏幕截图看起来返回的参数不是空的?看起来好像是说一些属性返回null。您能将私有setter删除为普通setter并查看吗?让我们看看可见性是否是导致控制器不填充模型的原因?您是否可以删除模型中的构造函数并查看它是否有帮助?通常建设者不会很好地使用模型绑定器。先生,你是一个传奇人物。谢谢。这确实有助于理解ASP.NET创建模型所采取的步骤,我一定会记住这一点,以便将来进行调试。这解决了我的问题,我需要提醒自己在我的视图模型中公开设置器。再次感谢!先生,你是个传奇人物。谢谢。这确实有助于理解ASP.NET创建模型所采取的步骤,我一定会记住这一点,以便将来进行调试。这解决了我的问题,我需要提醒自己在我的视图模型中公开设置器。再次感谢!
    public string Continent { get; set; }