Asp.Net Mvc liste de Case à cocher

Je suis la mise en œuvre de case à cocher liste dans MVC, bien que j'ai réussi à obtenir le résultat souhaité, j'ai un doute dans mon approche:

public class AdditionalServicesModel
{
    public IList<SelectListItem> AdditionalServices { get; set; }
}

=========================================================================

public class HomeController : Controller
{
    //
    //GET: /Home/

    public ActionResult Index()
    {
        AdditionalServicesModel objAdditionalServicesModel = new AdditionalServicesModel();

        List<SelectListItem> services = new List<SelectListItem>();
        services.Add(new SelectListItem { Text = "service-1", Value = "1", Selected=false });
        services.Add(new SelectListItem { Text = "service-2", Value = "2", Selected=false });
        services.Add(new SelectListItem { Text = "service-3", Value = "3", Selected=false });
        objAdditionalServicesModel.AdditionalServices = services;

        return View(objAdditionalServicesModel);
    }

    [HttpPost]
    public ActionResult Index(AdditionalServicesModel result)
    {
        return RedirectToAction("Thanks", "Home");
    }

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

=========================================================================

@model checkboxes.Models.AdditionalServicesModel
@{
    ViewBag.Title = "Index";
    Layout = null;
}


@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    for (int i = 0; i < Model.AdditionalServices.Count; i++)
    {        
        <ul>
            <li>
                @Html.CheckBoxFor(m=>Model.AdditionalServices[i].Selected, new { id = "Chk-" + i})
                @Html.Label(Model.AdditionalServices[i].Text, new { @for = "Chk-" + i })
                @Html.HiddenFor(m => Model.AdditionalServices[i].Text)
                @Html.HiddenFor(m=> Model.AdditionalServices[i].Value)
            </li>
        </ul>
    }
    <input type="submit" value="POST to Controller" />
}

1) Pour une case à cocher je dois créer 2 supplémentaires champs cachés.
Est-il une meilleure approche? Je me sens juste mal à faire tout ce long chemin, juste pour envoyer des cases à cocher valeurs + noms, Il serait beaucoup plus facile de recueillir ses valeurs avec du javascript et de l'envoyer via Json, mais je n'aurai pas discrète et validation...

2) j'envoie toutes les cases, alors que j'ai besoin d'envoyer uniquement les blocs sélectionnés.
Est-il un moyen de le faire avec les formes post?

Vous pouvez toujours utiliser la validation, vous avez juste besoin de faire appel à une validation sur la forme de l'objet avant d'essayer d'envoyer les options sélectionnées sur le serveur.
Vouliez-Vous dire discrète de validation qui fonctionne à la fois sur le client et le serveur? Avez-vous un exemple pour moi?
vous ne serez pas en mesure d'utiliser le même processus de validation si vous ne poster que des données partielles de retour, sauf si vous créez un deuxième modèle qui a les propriétés que vous souhaitez retourner. Ça va faire un peu poilue de le faire, même si, parce que vous devrez garder les modèles de synchronisation. À l'aide d'un modèle unique et l'affichage de toutes les données peuvent être validés dans les deux endroits à l'aide de DataAnnotations avec votre modèle, qui est la partie 2 de cette liaison. Le DataAnnotations sont utilisés en javascript discret, et il y a un Modelstate.IsValid() fonction que vous appelez l'endroit où les données sont affichées.

OriginalL'auteur Alex | 2013-08-05