2013-08-07 114 views
1

我有一个强类型的视图,我有一个窗体。我在文本框中显示联系人(对象)的值。联系人有一个功能列表。我也有一个数据库中存在的所有函数的列表。在视图中,我通过显示复选框列出所有功能(值:函数的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

首先,我们需要修改您的复选框,以便它们正确发布。当一个复选框被选中时,它将被张贴如下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 /> 
} 

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

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

希望这有助于。

+0

OK很好,但它是一个整体的形式,当我们要提交它,我们收到所有提交的数据的功能,'公众的ActionResult AjouterModifierContact(联系contactAModifier) {}' –

+0

如果您发布到模型中,只要保证模型可以接收'int'的枚举,并将复选框('function [x]')命名为模型中的该属性。 – Jay

+0

我会尝试,我会给你反馈。谢谢 –

相关问题