EditorFor显示完美,但没有相应保存

时间:2015-07-17 18:22:46

标签: asp.net-mvc

我正在尝试使用EditorFor在视图模型中的列表中输入值。我不希望列表中的每个元素都允许编辑。确定列表中哪个元素可以编辑的方法是在我的视图模型中使用附加列表。两个列表完美排列,因此在一个列表的第i个位置与另一个列表的第i个位置完全对应。代码如下:

<div class="form-group">
        @Html.Label("Inputs", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @for (int i = 0; i < Model.InputList.Count(); i++)
            {
                @Html.Label(i + 1 + ") " + Model.ProtocolSteps[i].Description)
                if (Model.ProtocolSteps[i].InputNeeded.Value)
                {
                    @Html.EditorFor(model => model.InputList[i], new { htmlAttributes = new { @class = "form-control" } })
                }
                <br />
            }
        </div>
    </div>

ProtocolSteps列表确定是否应显示编辑器模板。如果应该,则编辑器输入存储在InputList中。此代码在没有if语句的情况下完美运行(即所有值都存储在InputList中的正确位置)。使用if语句,视图显示完美,但值不会存储到InputList中(通常一个值存储在列表中,但不是全部存储)。任何帮助都会被理解为什么if语句搞乱了。

1 个答案:

答案 0 :(得分:0)

修改

离线了,我们发现ASP.NET需要它总是写出值,所以添加一个隐藏字段似乎有效。但如果有人在这篇文章中发生过,如果你能解释为什么这是必要的,那就好了。

@Html.Label(i + 1 + ") " + Model.ProtocolSteps[i].Description)
if (Model.ProtocolSteps[i].InputNeeded.Value)
{
   @Html.EditorFor(model => model.InputList[i], new { htmlAttributes = new { @class = "form-control" } })
}
else 
{
   @Html.HiddenFor(model => model.InputList[i]);
}

只是在看微软视频,他们说在迭代中使用@Html助手时,你需要直接引用列表,而不是传递给lambda表达式的值。因此,请尝试更改为:

@Html.EditorFor(i => Model.InputList[i], new { htmlAttributes = new { @class = "form-control" } })

修改 看起来像这里的类似问题。 How to use EditorFor inside a foreach

我更新了我之前的匹配条目,但我还没有对此进行测试。好像其他人确实因为它得到了很多赞成。