【发布时间】: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等?它们听起来像集合属性,这意味着它们不会绑定 -
它们都是 IEnumerable
-
您不能将复杂对象分配给隐藏的输入,更不用说复杂对象的集合查看您生成的html - 每个隐藏的输入都有
value="System.Web.Mvc[SelectListItem]"
标签: c# asp.net asp.net-mvc razor views