MVC 3用JQuery绑定SelectList到下拉列表
本文关键字:SelectList 下拉列表 绑定 JQuery MVC | 更新日期: 2023-09-27 18:16:43
我有以下关于MVC和Jquery的问题。我希望能够用JQuery调用一个动作服务器端,然后返回结果绑定到下拉列表。
在这一刻,我确实有类似的东西,但不是SelectList,我只是得到一个匿名类型集合。
我有以下JQuery:
<script type="text/javascript">
(function ($) {
$.fn.cascade = function (options) {
var defaults = {};
var opts = $.extend(defaults, options);
return this.each(function () {
$(this).change(function () {
var selectedValue = $(this).val();
var params = {};
params[opts.paramName] = selectedValue;
$.getJSON(opts.url, params, function (items) {
opts.childSelect.empty();
$.each(items, function (index, item) {
opts.childSelect.append(
$('<option/>')
.attr('value', item.Id)
.text(item.Name)
);
});
});
});
});
};
})(jQuery);
$(function () {
$('#Location_CountryId').cascade({
url: '@Url.Action("Regions")',
paramName: 'countryId',
childSelect: $('#Location_RegionId')
});
$('#Location_RegionId').cascade({
url: '@Url.Action("Cities")',
paramName: 'regionId',
childSelect: $('#Location_CityId')
});
});
</script>
在mvc 3中调用这个动作:
public ActionResult Cities(int regionId)
{
IList cities;
using (DatingEntities context = new DatingEntities())
{
cities = (from c in context.cities
where c.RegionID == regionId
select new
{
Id = c.CityId,
Name = c.Name
}).ToList();
};
return Json(cities, JsonRequestBehavior.AllowGet);
}
我的问题,然后我可以返回SelectList而不是illist并正确绑定它吗?
你能提供一个例子与我的代码吗?我有更复杂的行为,只是为了简单,我只发布了一部分。
谢谢
创建一个局部来呈现selectlist选项的html并返回它怎么样?
_SelectList.cshtml:
@model IList<SelectListItem>
@{
foreach (var item in Model)
{
<option value=@item.Value>@item.Text</option>
}
}
从你的控制器:
public ActionResult Cities(int regionId)
{
IList<SelectListItem> cities;
using (DatingEntities context = new DatingEntities())
{
cities = (from c in context.cities
where c.RegionID == regionId
select new SelectListItem()
{
Value = c.CityId,
Text = c.Name
}).ToList();
};
return PartialView("_SelectList", cities);
}
你的js可以像这样:
<script type="text/javascript">
(function ($) {
$.fn.cascade = function (options) {
var defaults = {};
var opts = $.extend(defaults, options);
return this.each(function () {
$(this).change(function () {
var selectedValue = $(this).val();
var params = {};
params[opts.paramName] = selectedValue;
$.get(opts.url, params, function (items) {
opts.childSelect.empty();
opts.childSelect.html(items);
}
});
});
};
})(jQuery);
$(function () {
$('#Location_CountryId').cascade({
url: '@Url.Action("Regions")',
paramName: 'countryId',
childSelect: $('#Location_RegionId')
});
$('#Location_RegionId').cascade({
url: '@Url.Action("Cities")',
paramName: 'regionId',
childSelect: $('#Location_CityId')
});
});
</script>
虽然-我通常做一些类似于你的JSON代码上面:-)
HTH
如何使用一些简单的jQuery迭代通过JSON对象您的Cities
方法返回。如
<script>
$('#Location_RegionId').change(function () {
$.get('@Url.Action("Cities", "[ControllerName]")/' + $('#Location_RegionId').val(), function (data) {
$('#Location_CityId').empty();
$.each(data, function() {
$('#Location_CityId').append($('<option />').val(this.CityId).text(this.Name));
});
});
});
$('#Location_RegionId').change();
<script/>
假设您选择的区域名为Location_RegionId
,您选择的城市id为Location_CityId
。
要像上面那样工作,它需要位于视图文件的底部,因此@Url.Action
被呈现为适当的URL。否则,你可以将其硬编码到一个.js文件中,并用document.ready.
在获取城市列表后将其转换为如下所示的选择列表项
var list=new List<SelectListItem>();
list.AddRange(cities.Select(o => new SelectListItem
{
Text = o.Name,
Value = o.CityId.ToString()
}));
}
return Json(list);