局部视图表单上的 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);
【问题讨论】:
展示你的模型。什么是Roles
、Institutions
等?它们听起来像集合属性,这意味着它们不会绑定
它们都是 IEnumerablevalue="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 中的列表