如何将对象添加到视图中的列表?

时间:2013-08-07 14:40:32

标签: c#-4.0 asp.net-mvc-4

我有一个强类型视图,我有一个表单。我在文本框中显示联系人(对象)的值。该联系人有一个功能列表。我还列出了数据库中存在的所有函数。在视图中,我通过显示复选框列出所有函数(值:函数的Id,显示:函数的名称)。在此之前,我将联系人函数列表与所有函数进行比较,然后检查了联系人的函数。像那样:

 @foreach (extranetClient.Models.Classes.FonctionContact fonction in ViewBag.Fonctions)
         {
                string coche = "";
                if ((@Model.ListeFonctions).Where(c => c.IdFonction == fonction.IdFonction).Count() > 0)
                     {
                          coche = "checked";
                     }

                <input type="checkbox" @coche id="@fonction.IdFonction" />@fonction.LibelleFonction <br />
         }

看起来像是:

enter image description here

但现在,如果用户选中复选框以向联系人添加功能,我需要将其保存在联系人列表中。我找不到怎么做。有人有想法吗?

1 个答案:

答案 0 :(得分:1)

首先我们需要修改您的复选框,以便他们正确发布。选中复选框后,它将像name=value一样发布。但我们希望将所有复选框都发布到集合中,因此名称将遵循此格式function[x],其中x是复选框的索引。然后该值成为函数的ID。

@{
    var i = 0;
}
@foreach (extranetClient.Models.Classes.FonctionContact fonction in ViewBag.Fonctions)
{
    string coche = "";
    if ((@Model.ListeFonctions).Any(c => c.IdFonction == fonction.IdFonction))
    {
        coche = "checked";
    }

    <input type="checkbox" @coche id="functions[@(i++)]" value="@fonction.IdFonction" />@fonction.LibelleFonction <br />
}

现在创建一个可以接收复选框数据的操作方法。假设您的函数ID为int s,只需提供一个可以接收int枚举的参数。

public ActionResult UpdateFunctions(IEnumerable<int> functions)
{
    // TODO: functions contains IDs of all checked boxes.
}

希望这有帮助。