在 MVC 5 模型中提交表单在控制器发布方法中为空 [重复]
Posted
技术标签:
【中文标题】在 MVC 5 模型中提交表单在控制器发布方法中为空 [重复]【英文标题】:Submitting Form in MVC 5 model is null in controller post method [duplicate] 【发布时间】:2016-06-17 15:36:05 【问题描述】:发布后我得到模型中的列表为空 我的模型有一个属性,它是 vwLog 的列表。
public class CreateLogViewModel
public List<vwLog> LogData;
鉴于我使用了该模型并使用 foreach 循环在文本控件中分配值
@model CreateLogViewModel
@using (html.BeginForm("CreateLog", "Log", FormMethod.Post, new @class = "form-horizontal", role = "form" ))
foreach (var item in Model.LogData)
<table>
<tr>
<td>
@Html.HiddenFor(modelItem => item.LogID)
@Html.TextBoxFor(modelItem => item.AgencyBillingCode)
</td>
<td>
@Html.TextBoxFor(modelItem => item.LicenseNumber)
</td>
</tr>
</table>
<div class="col-xs-12" align="center">
<input class="btn btn-default" type="submit" name="Submit" value="Save" id="Submit">
</div>
我的控制器是
在 Get 方法中,我在 LogData 对象中分配值,该对象是 vwlog 的集合。
public ActionResult CreateLog(CreateLogViewModel model)
model.LogData = GetDate();
return View(model);
我更新了屏幕上列表的一些值并尝试保存它,但我在 Post 中得到 model.LogData null。
[HttpPost]
public ActionResult CreateLog(CreateLogViewModel model, string submit)
if (model.LogData != null)
do this...
我更新了屏幕上列表的一些值并尝试保存它,但我在 Post 中得到 model.LogData null。模型不为空,但集合对象为空。 请让我知道我错在哪里。
【问题讨论】:
与问题无关,但为了安全起见,我强烈建议您在视图中使用 @Html.AntiForgeryToken() 并使用 [ValidateAntiForgeryToken()] 验证控制器中的令牌 您不能使用foreach
循环(请参阅骗子),并且您的模型必须包含属性,而不是 NightOwl888 指示的字段。
【参考方案1】:
MVC 模型绑定器不适用于类字段:
public class CreateLogViewModel
// This is a field
public List<vwLog> LogData;
你必须使用属性:
public class CreateLogViewModel
// This is a property
public List<vwLog> LogData get; set;
注意:您还需要确保您的
vwLog
类型具有公共读写属性才能工作。
【讨论】:
嘿,谢谢... 我做了一些更改,包括将其转换为属性。所以现在模型 public List以上是关于在 MVC 5 模型中提交表单在控制器发布方法中为空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型