C# 使用Textboxfor或Editorfor作为列表一部分的属性

C# 使用Textboxfor或Editorfor作为列表一部分的属性,c#,asp.net-mvc-4,html-helper,C#,Asp.net Mvc 4,Html Helper,我有一个模型,其中包含一个名为组织的组织列表。每个组织都有一个名称和一个编号 为了在提交表单时自动绑定模型,我需要按照我从几个教程中找到的命名约定为每个文本框指定一个特定的名称(请参阅代码中的nameprifix) 但是,我宁愿使用Html.TextboxFor而不是Html.Textbox,这样它将使用数据属性和验证。如何获取Html.TextboxFor以使用所需的命名约定 <% int orgIndex = 0; foreach(Organization org in

我有一个模型,其中包含一个名为
组织的
组织列表。每个
组织
都有一个
名称
和一个
编号

为了在提交表单时自动绑定模型,我需要按照我从几个教程中找到的命名约定为每个文本框指定一个特定的名称(请参阅代码中的
nameprifix

但是,我宁愿使用
Html.TextboxFor
而不是
Html.Textbox
,这样它将使用数据属性和验证。如何获取Html.TextboxFor以使用所需的命名约定

<%
    int orgIndex = 0;
    foreach(Organization org in Model.Organizations)
    { 
        string namePrefix = String.Format("Organizations[{0}].", orgIndex++);
        %>


    <%= Html.TextBox(namePrefix + "Name" , org.Name) %> 

    <%= Html.TextBox(namePrefix + "Number", org.Number) %>


<%  } %>

这是我的模型

 public class User
 {
      [ListMinLength(1)]
      public List<Organization> Organizations;
 }

 public class Organization
{
    [Display(Prompt = "COMMON_DEALER_NAME", ResourceType = typeof(Modules.Properties.Resources))]
    public string Name { get; set; }

    [Display(Prompt = "DEALER_ID_PLACEHOLDER", ResourceType = typeof(Modules.Properties.Resources))]
    public string Number { get; set; }
    public long Id { get; set; }
}
公共类用户
{
[附表1(1)]
公开名单组织;
}
公营班级组织
{
[显示(Prompt=“COMMON\u DEALER\u NAME”,ResourceType=typeof(Modules.Properties.Resources))]
公共字符串名称{get;set;}
[显示(Prompt=“经销商ID\u占位符”,ResourceType=typeof(Modules.Properties.Resources))]
公共字符串编号{get;set;}
公共长Id{get;set;}
}

让Razor为您处理这个问题。将代码更改为:

for (var i = 0; i < Model.Organizations.Count(); i++)
{ 
    <%= Html.TextBoxFor(m => m.Organizations[i].Name) %> 

    <%= Html.TextBoxFor(m => m.Organizations[i].Number) %>
}
for(var i=0;i
m、 组织[i].数量)%>
}

然后会自动生成正确的名称。

我想我需要制作一个自定义编辑器模板,并使用EditorFor html helper。谢谢。是否使用对表达式的反射来知道它是列表的一部分?不幸的是,这对验证消息不起作用。是的,它起作用。它将遵循相同的格式:
Html.ValidationMessageFor(m=>m.Organizations[i].Name)
Hmm。模型状态不包含组织的任何键。