绑定对象列表

时间:2015-01-23 20:16:13

标签: 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; }

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

    public virtual ICollection<ResponsablesClient> ResponsablesClients { get; set; }
}

和ResponsablesClient:

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)方法:

public ActionResult Create()
    {
        return View();
    }

当我想创建一个新客户端时,我使用类型为client的强类型视图,并在该视图中添加动态强类型部分视图。 在创建httpPost中,我获得的客户端模型包含客户端属性,但不包含responsablesClients列表,这里是最小化视图:

<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>

所以我的问题是如何在不创建自定义视图的情况下获取ResponsablesClient列表:

public Client  client {get;set;}
public List<ResponsablesClient> responsablesClient {get;set;}

1 个答案:

答案 0 :(得分:0)

如果有人有同样的问题,我发现解决方案可能不是最好的,但它做到了。 每次我做一个ajax调用渲染部分视图我传递一个id,我通过ViewData传递给视图,这是带有约定的渲染视图的总数,这里是代码:

调用渲染局部视图

@Html.Partial("_ResponsableCreate",new ResponsablesClient(),new ViewDataDictionary(){new KeyValuePair<string, object>("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"})

我通过ViewData检索id我使用此Id并将其放入隐藏输入中,它是非顺序列表的mvc约定,因此您不必设置连续的Id,然后每个输入的名称遵循约定:

name =“PropertyNameOfTheListInTheModel [@variable] .propery”