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