使用HTML帮助程序HiddenFor C#MVC将模型添加到模型中

时间:2018-10-29 13:06:30

标签: c# html .net model-view-controller html-helper

我有一个类似

的模型
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

3 个答案:

答案 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的唯一问题是将空列表传递给视图,返回空值,因此只需在返回空值时将其替换为空列表即可。