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?
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
Vous devez vous connecter pour publier un commentaire.
Créer une "case à cocher services de l'élément' classe (réutilisable), et de faire une liste ou énumérable d'entre eux comme une propriété dans votre AdditionalServicesModel.
Aussi, il y a probablement une meilleure idée de créer un constructeur du modèle, de sorte que vous n'avez pas à affecter les propriétés du modèle à l'intérieur du contrôleur.
Créer un éditeur de modèle pour d'autres Services, de référencer facilement dans votre point de vue (vous n'avez pas à ajouter un caché pour le texte, seule la valeur et les propriétés sélectionnées seront par défaut lié vers le modèle:
Puis pop de l'éditeur de modèle à votre vue (laisser MVC.net faire sa magie - avoir un regard sur la balise pour voir ce qu'il fait):
Puis inspectez le liés automatiquement les valeurs de votre contrôleur:
OriginalL'auteur sambo