我有一个类似
的模型public class Model
{
public int Value { get; set; }
public List<OtherModel> List { get; set; }
}
public class OtherModel
{
public int Value1 { get; set; }
public int Value2 { get; set; }
public bool IsPropTrue { get; set; }
}
我在视图中使用Model
,在其中循环浏览List
以在表中显示数据。
根据IsPropTrue
中的属性(OtherModel
)是对还是假,我想使用HiddenFor
HTML帮助器并将数据发送到{{1} }控制器。
HttpPost
我认为它不起作用,因为我应该以某种方式将这些属性添加到@model Model
@foreach (var item in Model.List)
{
if (item.IsPropTrue)
{
@Html.HiddenFor(model=> item.Value1)
@Html.HiddenFor(model=> item.Value2)
}
}
内部的OtherModel
中;但是,现在的方式是,我将属性添加到Model
。
答案 0 :(得分:1)
您可以这样:
@model Model
@foreach (var item in Model.List)
{
if (item.IsPropTrue)
{
@Html.HiddenFor(model => model.List[Model.List.IndexOf(item)].Value1)
@Html.HiddenFor(model => model.List[Model.List.IndexOf(item)].Value2)
}
}
通过这种方式,绑定系统将隐藏字段与模型中的List OtherModel绑定
答案 1 :(得分:0)
如果要基于Model将数组发送到服务器,则必须在@ Html.HiddenFor中使用索引器。
@model WebApplication1.Models.MyModel
<form>
@if (Model != null && Model.List != null)
{
for (int i = 0; i < Model.List.Count; i++)
{
if (Model.List[i].IsPropTrue)
{
@Html.HiddenFor(model => Model.List[i].Value1)
@Html.HiddenFor(model => Model.List[i].Value2)
}
}
}
<button type="submit">submit</button>
</form>
如果您想知道在模型上使用索引器的原因,我建议How does MVC 4 List Model Binding work?
答案 2 :(得分:0)
考虑是视图还是控制器动作来制定决策的责任-您可以将所有内容发送回动作中以进行决策。
在“视图/共享”文件夹中,创建一个名为EditorTemplates的控制器。 在此文件夹中,添加一个名为OtherModel的局部视图。 在此视图中,将模型设置为OtherModel并设置Layout = null 在EditorFor(如果未显示isPropTrue,则为HiddenFor)中添加三个OtherModel字段。此局部视图仅显示列表的一个实例。
在主视图中,使用上述编辑器模型。 MVC将为您完整的项目清单处理所有模型状态的呈现和回发。我们喜欢单线...
@Html.EditorFor(model => model.OtherModel)
随后将数据发布回操作时,“模型状态”将所有显示的项目再次包装到列表中,因此您可以检查服务器上每个项目的isPropTrue值。
MVC的唯一问题是将空列表传递给视图,返回空值,因此只需在返回空值时将其替换为空列表即可。