局部视图表单上的 HiddenFor 不包含任何元素

Posted

技术标签:

【中文标题】局部视图表单上的 HiddenFor 不包含任何元素【英文标题】:HiddenFor on Partial View form contains no elements 【发布时间】:2016-02-25 16:44:56 【问题描述】:

我有一个包含表单的局部视图。我正在尝试在隐藏的输入元素中传递列表,以便当模型状态无效时它可以正确回发。问题是隐藏的输入实体不包含数据(它不是空的,它只是空的)。

我的父视图包含一个包含两个视图模型的视图模型(1 个用于子视图,1 个用于父视图)

public class UsersModel

    public CreateUserModel CreateModel  get; set; 
    public IEnumerable<UserTableModel> UserData  get; set; 

我的父视图的控制器操作 (GET) 设置 CreateModel 和 UserData 并将 UserData 存储到 TempData 变量中,以便在模型无效的情况下可以将其传递回父视图状态。

我的子视图/部分视图包含以下内容

@model APGame.Client.ViewModels.CreateUserModel

@using (html.BeginForm("Users", "Admin", FormMethod.Post, new role = "form", autocomplete = "off"))


    @Html.HiddenFor(m => m.Roles)
    @Html.HiddenFor(m => m.Institutions)
    @Html.HiddenFor(m => m.InvestigatorGroups)
    @Html.HiddenFor(m => m.Participation)
    @Html.HiddenFor(m => m.FamilyGroups)

如果模型状态无效,我的 POST 控制器操作会执行以下操作

var userModel = new UsersModel()

    UserData = TempData["UserData"] as IEnumerable<UserTableModel>,
    CreateModel = model
;

return View("Users", userModel);

【问题讨论】:

展示你的模型。什么是RolesInstitutions 等?它们听起来像集合属性,这意味着它们不会绑定 它们都是 IEnumerable 您不能将复杂对象分配给隐藏的输入,更不用说复杂对象的集合查看您生成的html - 每个隐藏的输入都有value="System.Web.Mvc[SelectListItem]" 【参考方案1】:

我总是必须列出我正在尝试执行与您正在执行的相同绑定逻辑的对象的每个属性。

考虑如何缩短它,你可以在你的视图中尝试这个:

@Html.EditorForModel(m => m.Roles, "Role", new @class="hiddenProperty")

并确保包含此 CSS 以隐藏这些属性:

.hiddenProperty

display: none;

或者使用jQuery隐藏属性:

$('.hiddenProperty').hide();

【讨论】:

以上是关于局部视图表单上的 HiddenFor 不包含任何元素的主要内容,如果未能解决你的问题,请参考以下文章

动态局部视图 + jquery 表单劫持 + 客户端验证 = 不工作

@Html.HiddenFor 不适用于 ASP.NET MVC 中的列表

在视图组件或局部视图中使用表单

MVC3 Html.HiddenFor(Model => Model.Id) 不传回控制器

发布后特定视图不更新内容

在使用MVC5 添加视图后 添加的视图中 关键字ViewBag model 等报错。