C# 绑定对象列表

C# 绑定对象列表,c#,asp.net-mvc,model-binding,C#,Asp.net Mvc,Model Binding,我的客户是: public partial class Client { public Client() { ResponsablesClients = new HashSet<ResponsablesClient>(); } [Key] [StringLength(10)] [ScaffoldColumn(false)] public string CodeClient { get; set; }

我的客户是:

 public partial class Client
{

    public Client()
    {
        ResponsablesClients = new HashSet<ResponsablesClient>();
    }

    [Key]
    [StringLength(10)]
    [ScaffoldColumn(false)]
    public string CodeClient { get; set; }

    [StringLength(50)]
    [DisplayName("Raison sociale")]
    [Required]
    public string Name { get; set; }

    public virtual ICollection<ResponsablesClient> ResponsablesClients { get; set; }
}
public partial class ResponsablesClient
{
    public int Id { get; set; }

    [StringLength(10)]
    [ScaffoldColumn(false)]
    public string CodeClient { get; set; }

    [StringLength(50)]
    [DisplayName("Nom complet")]
    [Required]
    public string Nom { get; set; }

    public virtual Client Client { get; set; }
}
我的控制器创建(httpget)方法:

当我想要创建一个新的客户机时,我使用类型为client的强类型视图,并在该视图中添加动态强类型局部视图。 在create httpPost中,我得到的客户端模型包含客户端属性,但不包含负责客户端的列表,以下是最小化视图:

<div class="form-group">
        @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.Name, new {@class="form-control"})
            @Html.ValidationMessageFor(model => model.Name)
        </div>
    </div>

<div class="form-horizontal" style="margin-top: 50px">
        <h4>Responsables</h4>
        <hr/>
        <div id="responsables">
            <div id="responsable0">
                @Html.Partial("_ResponsableCreate",new ResponsablesClient())
            </div>
        </div>
    </div>

@LabelFor(model=>model.Name,新的{@class=“controllabel col-md-2”})
@Html.TextBoxFor(model=>model.Name,新的{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Name)
负责人

@Html.Partial(“\u ResponsableCreate”,new ResponsablesClient())
因此,我的问题是,如何在不创建自定义视图的情况下获取ResponsibleSClient列表,如下所示:

public Client  client {get;set;}
public List<ResponsablesClient> responsablesClient {get;set;}
公共客户端{get;set;}
公共列表责任客户端{get;set;}

如果有人有同样的问题,我找到了一个可能不是最好的解决方案,但它做到了。 每次我调用ajax渲染局部视图时,我都会传递一个id,该id通过ViewData传递给view,ViewData是具有命名约定的渲染视图的总数。下面是代码:

渲染局部视图的调用

@Html.Partial("_ResponsableCreate",new ResponsablesClient(),new ViewDataDictionary(){new KeyValuePair<string, object>("id",count)})
@Html.Partial(“\u ResponsableCreate”,new ResponsablesClient(),new ViewDataDictionary(){new KeyValuePair(“id”,count)})
然后在局部视图中:

@{
var variable = ViewData["id"];
}
<input type="hidden" name="ResponsablesClients.Index" value="@variable"/>

@Html.TextBoxFor(model => model.Nom, new {@class = "form-control", Name = "ResponsablesClients[" + @variable + "].Nom"})
@{
var变量=ViewData[“id”];
}
@Html.TextBoxFor(model=>model.Nom,新的{@class=“form control”,Name=“ResponsablesClients[“+@variable+”].Nom”})
我通过ViewData检索id我使用此id并将其放在隐藏输入中,这是非顺序列表的mvc约定,因此您不必设置连续id,然后每个输入的名称遵循约定:


name=“propertynameofListentheModel[@variable].property”

至少有一个答案或否决投票的理由……你应该给出更多的解释,更加精确。从你的问题和背景开始提问,让人们理解你的问题。在这里抛出代码而不解释它不会帮助我们帮助您。你可能应该阅读它,这将有助于你让其他人理解你的问题。我想否决你的人会有更多的话要说,但如果你很快编辑你的文本,这并不重要。需要显示你的局部视图,但除非你使用
BeginCollectionItem
helper,使用局部视图没有帮助,因为生成重复的
name
属性和无效的html。可能会帮助您理解这些问题(在任何情况下,您都应该使用视图模型!),正如您所说的,这可能不是最好的。这可能会失败的原因有很多(例如,您似乎将索引器值基于集合中的项目计数,因此如果您删除一个项目,添加一个新项目,您将获得重复的值,绑定将失败)。我建议你研究一下我上面评论中的链接。你是对的,如果我删除divs,id将不再是count,而是id的子字符串:example:id=“example23”newId=parseInt(id.substring(7))+1,这里是隐藏输入的实用程序
@{
var variable = ViewData["id"];
}
<input type="hidden" name="ResponsablesClients.Index" value="@variable"/>

@Html.TextBoxFor(model => model.Nom, new {@class = "form-control", Name = "ResponsablesClients[" + @variable + "].Nom"})