C# 对列表项使用标记帮助器验证

C# 对列表项使用标记帮助器验证,c#,asp.net-mvc,razor,asp.net-core,C#,Asp.net Mvc,Razor,Asp.net Core,我看到了,它似乎完全涵盖了我想要做的事情,但由于某种原因,这里给出的解决方案对我不起作用 我认为: @model ExerciseEditModel @foreach (var item in Model.Rounds) { <!-- bootstrap grid markup omitted --> <div class="form-group col-sm-3"> <label asp-for="item.DurationEst

我看到了,它似乎完全涵盖了我想要做的事情,但由于某种原因,这里给出的解决方案对我不起作用

我认为:

@model ExerciseEditModel

@foreach (var item in Model.Rounds)
{
    <!-- bootstrap grid markup omitted -->
    <div class="form-group col-sm-3">
        <label asp-for="item.DurationEstimate"></label>
        <input asp-for="item.DurationEstimate" type="time" class="form-control" />
    </div>
    <!-- bootstrap grid markup, and more form elements, omitted -->
}
@model ExerciseEditModel
@foreach(Model.Rounds中的var项)
{
}
据我所知,这与链接问题中的解决方案是如何工作的,但是我在视图中得到了一个构建错误,因为

“ExerciseEditModel”不包含“item”的定义,并且找不到接受“ExerciseEditModel”类型的第一个参数的扩展方法“item”(是否缺少using指令或程序集引用?)

似乎
asp for
助手的作用域没有注意到
foreach
循环-如何使其工作?

来自:

属性值的
asp是
ModelExpression
和lambda表达式的右侧。因此,
asp for=“Property1”
在生成的代码中变成
m=>m.Property1
,这就是为什么不需要使用
Model
作为前缀。您可以使用“@”字符启动内联表达式并移动到
m之前。

因此,您应该在表达式前面加上
@

@model ExerciseEditModel

@foreach (var item in Model.Rounds)
{
    <!-- bootstrap grid markup omitted -->
    <div class="form-group col-sm-3">
        <label asp-for="@item.DurationEstimate"></label>
        <input asp-for="@item.DurationEstimate" type="time" class="form-control" />
    </div>
    <!-- bootstrap grid markup, and more form elements, omitted -->
}
@model ExerciseEditModel
@foreach(Model.Rounds中的var项)
{
}

Occam的剃刀问题:您是否在任何地方缺少使用
语句的
语句?@krillgar可能,但在这种情况下,我不知道我缺少使用
语句的
语句(或我需要的语句)。我应该寻找什么?我还没有完成核心MVC,这就是为什么我提出了一个问题。很抱歉,我无法提供更多帮助,但看起来David G有您所需要的。您缺少了前导的
@
-即
asp for=“@item.DurationEstimate”
,但是当您将其分为子项时,它将不会绑定到您的模型,您需要使用
for
for=model[I].DurationEstimate“
-参考)的
for
循环来获得更多解释