Comment puis-je obtenir les résultats d'une liste déroulante JQUery Multi-select comme appelée par un mvc3/rasoir?jQuery MultiSelect dropdownlist comment accéder aux résultats?
http://abeautifulsite.net/blog/2008/04/jquery-multiselect/
Comment puis-je obtenir les résultats d'une liste déroulante JQUery Multi-select comme appelée par un mvc3/rasoir?jQuery MultiSelect dropdownlist comment accéder aux résultats?
http://abeautifulsite.net/blog/2008/04/jquery-multiselect/
Le plugin utilise multiselect la notation []
pour envoyer les valeurs sélectionnées au serveur. Comme toujours, nous commençons par écrire un modèle de vue:
public class MyViewModel
{
public IEnumerable<string> SelectedValues { get; set; }
public IEnumerable<SelectListItem> Items
{
get
{
return new[]
{
new SelectListItem { Value = "1", Text = "item 1" },
new SelectListItem { Value = "2", Text = "item 2" },
new SelectListItem { Value = "3", Text = "item 3" },
};
}
}
}
puis un contrôleur:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
une vue correspondante:
@model MyViewModel
<script src="@Url.Content("~/Scripts/jquery.multiSelect.js")" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#SelectedValues").multiSelect();
});
</script>
@using (Html.BeginForm())
{
@Html.ListBoxFor(x => x.SelectedValues, Model.Items)
<button type="submit">OK</button>
}
et enfin un modèle de liaison associé au type IEnumerable<string>
et qui fonctionnera avec la notation []
utilisée par le plugin:
public class MultiSelectModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var model = (MyViewModel)base.BindModel(controllerContext, bindingContext);
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[]");
if (value != null)
{
return value.RawValue;
}
return model;
}
}
La dernière partie est d'enregistrer le liant modèle Application_Start
:
ModelBinders.Binders.Add(typeof(IEnumerable<string>), new MultiSelectModelBinder());
S'il vous plaît essayer ceci pour obtenir les valeurs sélectionnées
public ActionResult Index(MyViewModel model, FormCollection collection)
{
string selectedValues=collection["SelectedValues[]"]; //here you get comma separated values
return View(model);
}
C'était un petit raccourci génial au lieu de itérateur à travers le modèle []. Merci! – JaJ
En fait, vous pouvez également recevoir les valeurs sélectionnées en ajoutant un paramètre à votre action.
Par exemple, disons que vous avez ci-dessous listbox:
//Controller GET
public ActionResult ManageUsers()
{
ViewBag.Users = new SelectList(repository.GetAllUsers(), "Id", "Email");
return View();
}
//View
@Html.ListBox(ViewBag.Users as SelectList, new { @id = "users" })
//Controller POST
[HttpPost]
public ActionResult ManageUsers(List<int> users)
{
//Manage all the selected users which will appear in the List.
return View()...
}
Je crois que vous pouvez avoir un tableau que le type au lieu d'une liste générique aswell, havn't essayé moi-même si, la clé est toutefois nommez le paramètre de la même manière que l'ID d'élément html pour la zone de liste.
FANTASTIQUE! Merci! – JaJ