2014-12-02 68 views
0

我有一个模型,其中包含名为OrganizationsOrganization的列表。每个Organization有一个Name和一个Number使用Textboxfor或Editorfor作为列表的一部分的属性

为了让模型在提交表单时自动绑定,我需要按照我从几个教程中找到的命名约定(请查看代码中的namePrefix)给每个文本框一个特定的名称。

但是,我宁愿使用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; } 
} 
+0

我想我需要制作一个自定义编辑器模板,并使用EditorFor html helper。 – Dave 2014-12-02 20:50:45

回答

1

让剃须刀手柄,这个给你。将您的代码更改为:

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

    <%= Html.TextBoxFor(m => m.Organizations[i].Number) %> 
} 

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

+0

谢谢。它是否在表达式上使用反射来知道它是列表的一部分? – Dave 2014-12-02 21:28:38

+0

不幸的是这不适用于验证消息。 – Dave 2014-12-02 23:26:53

+0

是的。它会遵循相同的格式:'Html.ValidationMessageFor(m => m.Organizations [i] .Name)' – 2014-12-02 23:29:39

相关问题