gpt4 book ai didi

c# - asp.net mvc 3 View 中 foreach 循环中每个元素的唯一 ID?

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:06 24 4
gpt4 key购买 nike

我有一个 ViewModel 集合,我将它们从 Controller 发送回 View

   public class CourseTableViewModel
{
public string Prefix { get; set; }
public bool OwnerPremission { get; set; }
public bool AddPermission { get; set; }
public bool EditPermission { get; set; }
public bool DeletePermission { get; set; }
public bool ViewPermission { get; set; }
}

所以我有这些的列表

@foreach (var item in Model)
{
<tr>
<td>@Html.CheckBoxFor(x => item.OwnerPermission) </td>
//.... rest here //
</tr>

}

这将循环 X 次,具体取决于 VM 的发回方式,但它们都具有相同的 ID,我希望它们不同。

所以我这样做了

<td>@Html.CheckBoxFor(x => item.OwnerPremission,new {@disabled = "disabled", @id = PermissionTypes.Owner.ToString() + counter})</td>

请问有没有更好的方法

编辑

所以我做了模板方式(虽然显示而不是编辑)并在里面有这个

  <td>@Html.CheckBoxFor(x => x.OwnerPremission, new { @disabled = "disabled"})</td>

它为第一个呈现这个。

<td><input type="checkbox" value="true" name="[0].OwnerPremission" disabled="disabled" checked="checked"><input type="hidden" value="false" name="[0].OwnerPremission"></td>

没有id只有名字。为什么不显示?

最佳答案

您可以为此 View 模型使用编辑器模板,这将确保正确的 idname 属性。因此,假设您的主视图模型是 CourseTableViewModel 的集合或具有作为 CourseTableViewModel 集合的属性,您可以在主视图中执行以下操作:

@model IEnumerable<AppName.Models.CourseTableViewModel>
<table>
<tr>
@Html.EditorForModel()
</tr>
</table>

并在相应的编辑器模板中(~/Views/Shared/EditorTemplates/CourseTableViewModel.cshtml):

@model AppName.Models.CourseTableViewModel
<td>
@Html.CheckBoxFor(x => x.OwnerPremission, new { @disabled = "disabled" })
</td>
...

编辑器模板将针对 View 模型集合中的每个项目执行,避免您在 View 中编写任何循环。您只需遵循这些模板的命名约定(它必须称为 CourseTableViewModel.cshtml,因为这是在主视图模型集合中使用的类型名称)。


更新:

在我提供的示例中,根本没有为复选框生成任何 ID。您可以执行以下操作为每个复选框生成一个唯一的 ID:

@model AppName.Models.CourseTableViewModel
<td>
@Html.CheckBoxFor(
x => x.OwnerPremission,
new {
@disabled = "disabled",
id = HtmlHelper.GenerateIdFromName("OwnerPremission." + ViewData.TemplateInfo.GetFullHtmlFieldName(""))
}
)
</td>

关于c# - asp.net mvc 3 View 中 foreach 循环中每个元素的唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5374119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com