我发布了我的<input type="submit" value ="submit">
数据,其格式如下(使用firebug检查)
Role1 true
Role1 false
Role1 true
Role1 false
Name1 "Name 1"
Name2 "Name2"
并在我的控制器中
[HttpPost]
public ActionResult GetPostData(ArrayList data)
问题是我应该在控制器中放置什么样的参数才能拥有某种数据结构,这些结构会被post发送的值填满?我不想使用FormCollection。我可以制作某种PostModel,但所有这些数据都是通过jquery动态生成的隐藏字段发送的,所以我无法想象如何将postmodel与字段绑定。
答案 0 :(得分:4)
我想你的意思是(因为有四次角色1似乎有点奇怪):
Role1 true
Role1 false
Role2 true
Role2 false
Name1 "Name 1"
Name2 "Name2"
您可以使用视图模型:
public class MyViewModel
{
public bool Role1 { get; set; }
public bool Role2 { get; set; }
public string Name1 { get; set; }
public string Name2 { get; set; }
}
然后:
[HttpPost]
public ActionResult GetPostData(MyViewModel model)
{
...
}
因为我怀疑你正在做复选框的东西(由于每个角色的双布尔值,因为CheckBox帮助器生成一个隐藏的字段),这里是我建议你:
型号:
public class RoleViewModel
{
public bool IsSelected { get; set; }
public string Name { get; set; }
}
public class EditRolesViewModel
{
public RoleViewModel[] Roles { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new EditRolesViewModel
{
Roles = new[]
{
new RoleViewModel { Name = "Role 1", IsSelected = true },
new RoleViewModel { Name = "Role 2", IsSelected = false },
new RoleViewModel { Name = "Role 3", IsSelected = true },
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(EditRolesViewModel model)
{
return View(model);
}
}
查看:
@model EditRolesViewModel
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Roles.Length; i++)
{
<div>
@Html.HiddenFor(x => x.Roles[i].Name)
@Html.LabelFor(x => x.Roles[i].IsSelected, Model.Roles[i].Name)
@Html.CheckBoxFor(x => x.Roles[i].IsSelected)
</div>
}
<button type="submit">OK</button>
}
甚至更好,使用将为每个角色呈现的编辑器模板:
@model EditRolesViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Roles)
<button type="submit">OK</button>
}
和编辑器模板(~/Views/Shared/EditorTemplates/RoleViewModel.cshtml
):
@model RoleViewModel
<div>
@Html.HiddenFor(x => x.Name)
@Html.LabelFor(x => x.IsSelected, Model.Name)
@Html.CheckBoxFor(x => x.IsSelected)
</div>
答案 1 :(得分:0)
像Darin建议你应该使用视图模型。
这样您就可以将数据从Controller传递到View,反之亦然。当您验证视图模型,检测某种验证错误(例如值太低)然后将所有数据发送回视图时,这非常方便。
您可以找到关于“移动”的不同方法的良好说明。客户端和服务器端之间来回传输数据。
Use ViewData and Implement ViewModel Classes
<强>更新强>
问题可能在于复选框的绑定,所以我添加的链接可能也是&#34;泛型&#34;。