C# Razor页面-为foreach循环中的控件创建唯一标识符

C# Razor页面-为foreach循环中的控件创建唯一标识符,c#,asp.net-core,foreach,.net-core,razor-pages,C#,Asp.net Core,Foreach,.net Core,Razor Pages,在使用foreach循环时,如何为一组复选框创建唯一的名称引用 @foreach (var item in Model.myClass.Where(i => i.ID1 == 0)) { <input type="text" asp-for="@item.Stuff" /> <input type="text" asp-for="@item.Stuff" /> <input type="text" asp-for="@item.Stuff" /&g

在使用foreach循环时,如何为一组复选框创建唯一的名称引用

@foreach (var item in Model.myClass.Where(i => i.ID1 == 0))
{
  <input type="text" asp-for="@item.Stuff" />
  <input type="text" asp-for="@item.Stuff" />
  <input type="text" asp-for="@item.Stuff" />
}
@foreach(Model.myClass.Where(i=>i.ID1==0)中的var项)
{
}
HTML(输出)



我已经看到了Razor Pages建议,但是它建议使用for循环或显式索引,这在我的例子中不起作用,因为我需要在语句中使用where子句

示例

@for (var i = 0; i < 5; i++)
{
  <tr>
    <td>
      <input type="text" asp-for="Contacts[i].FirstName" />
    </td>
    <td>
      <input type="text" asp-for="Contacts[i].LastName" />
    </td>
    <td>
      <input type="text" asp-for="Contacts[i].Email" />
    </td>
  </tr>
}
(变量i=0;i<5;i++) { }
每当你想在内容页或视图中添加计数器变量时,这表明你正在做一些次优的事情。这是一种代码气味

我要做的是尽量减少.cshtml文件中的代码,过滤页面模型中的项目。我想添加另一个属性:

public class MyPageModel : PageModel
{
    public List<MyClass> Entities { get; set; } = new List<MyClass>();
    public List<MyClass> EntitiesWithNoId => Entities.Where(e => e.ID == 0);
    // blah blah
}
公共类MyPageModel:PageModel
{
公共列表实体{get;set;}=new List();
public List Entities withnoid=>Entities.Where(e=>e.ID==0);
//废话
}
然后在内容页中:

@for (var i = 0; i < Model.EntitiesWithNoId.Count(); i++)
{
  <tr>
    <td>
      <input type="text" asp-for="EntitiesWithNoId[i].FirstName" />
    </td>
    <td>
      <input type="text" asp-for="EntitiesWithNoId[i].LastName" />
    </td>
    <td>
      <input type="text" asp-for="EntitiesWithNoId[i].Email" />
    </td>
  </tr>
}
for(var i=0;i
这是使用PageModel的ViewModel方面的一个示例。它的一部分作用是充当为视图准备数据的地方。

您可以尝试使用htmlhelpers而不是标记帮助程序,即使使用foreach,您也可以使用整数计数器生成它们,而不会产生任何问题。@{var i=0;}@foreach(集合中的var项){++i;}了解我是如何用这种html方式而不是使用标记的helper@Alok谢谢我已经可以用标准的html实现我所需要的了,我对标记助手还不熟悉,并且一直认为那里很棒,直到他们没能完成这个简单的任务。你建议在这种情况下不要使用标记助手吗?即使你可以做一些扩展,但花这么多时间在html中已有的简单内容上也不值得,另外,如果您使用直接html,您知道事情不会变得复杂,它还将为您节省asp标记转换为html页面所需的性能output@Alok我想你是对的。谢谢你的洞察力。
@for (var i = 0; i < Model.EntitiesWithNoId.Count(); i++)
{
  <tr>
    <td>
      <input type="text" asp-for="EntitiesWithNoId[i].FirstName" />
    </td>
    <td>
      <input type="text" asp-for="EntitiesWithNoId[i].LastName" />
    </td>
    <td>
      <input type="text" asp-for="EntitiesWithNoId[i].Email" />
    </td>
  </tr>
}