在 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 LogData get;放; 和控制器是 -- List LogList = new List();日志服务服务 = 新的日志服务(); LogList = getdata() model.LogData = LogList;

以上是关于在 MVC 5 模型中提交表单在控制器发布方法中为空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有模型数据的 MVC 5 路由

如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型

在 spring mvc 的模型属性中保留值

提交表单并将数据传递给 FileStreamResult 类型的控制器方法

表单提交两次mvc

ASP.NET MVC 表单提交多层子级实体集合数据到控制器中