gen*_*eek 2 jquery razor asp.net-mvc-3
如何从按照mvc3/razor调用的JQUery Multi-select下拉列表中获取结果?
multiselect插件使用[]表示法将选定的值发送到服务器.我们一如既往地编写视图模型:
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" },
};
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后一个控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
相应的观点:
@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>
}
Run Code Online (Sandbox Code Playgroud)
最后是一个与该IEnumerable<string>类型相关联的模型绑定器,它将与[]插件使用的符号一起使用:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
最后一部分是注册模型绑定器Application_Start:
ModelBinders.Binders.Add(typeof(IEnumerable<string>), new MultiSelectModelBinder());
Run Code Online (Sandbox Code Playgroud)