省市联动,然后保存。可以正常实现。页面刷新后,想把保存的结果赋值到下拉列表中。省份列表可以被赋值,城市列表无法赋值,因为为省份列表赋值的时候,没有触发省份列表的change事件,所以城市列表为空。请问这种情况应该如何处理??附代码:
页面:@Html.DropDownListFor(m => m.Residence1, Model.GetBuildings(), "请选择", new { @id = "Builds" })
@Html.DropDownListFor(m => m.Residence2, Model.GetUnits(""), new { @id = "BUnits" })
页面对应JS:$(function () {
$("#Builds").change(function () {
var selectedvalue = $(this).val();
var url = "/Account/BuildUnits"; $("#BUnits").find("option").remove(); //清空 $.post(url, { bnum: selectedvalue },
function (data) {
$.each(data, function (i, item) {
$("<option></option>").val(item["Value"]).text(item["Text"]).appendTo($("#BUnits"));
});
});
});});
Controller: [Authorize(Roles = "0,1,2")]
[HttpPost]
[ActionName("BuildUnits")]
public JsonResult BuildUnits(string bnum)
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "请选择", Value = "0" });
if (bnum != "")
try
{
.........
}
catch (Exception ex)
{
ModelState.AddModelError("", ex.Message);
}
return Json(items, JsonRequestBehavior.AllowGet);
}
页面:@Html.DropDownListFor(m => m.Residence1, Model.GetBuildings(), "请选择", new { @id = "Builds" })
@Html.DropDownListFor(m => m.Residence2, Model.GetUnits(""), new { @id = "BUnits" })
页面对应JS:$(function () {
$("#Builds").change(function () {
var selectedvalue = $(this).val();
var url = "/Account/BuildUnits"; $("#BUnits").find("option").remove(); //清空 $.post(url, { bnum: selectedvalue },
function (data) {
$.each(data, function (i, item) {
$("<option></option>").val(item["Value"]).text(item["Text"]).appendTo($("#BUnits"));
});
});
});});
Controller: [Authorize(Roles = "0,1,2")]
[HttpPost]
[ActionName("BuildUnits")]
public JsonResult BuildUnits(string bnum)
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "请选择", Value = "0" });
if (bnum != "")
try
{
.........
}
catch (Exception ex)
{
ModelState.AddModelError("", ex.Message);
}
return Json(items, JsonRequestBehavior.AllowGet);
}
解决方案 »
- 单点登陆 关于session的问题。
- 阅读器关闭时尝试调用 Read 无效。关于考勤的,代码贴出来给大侠们看,小弟新手。
- onclick不起作用了,求解
- [在线等]gridview启用编辑功能
- ScriptManager +updatepanel放到iframe中 速度很慢,就是没反应,不刷新数据
- SQL语句中的类型转换问题
- gridview表头得背景怎么设置阿?
- asp.net 中的网站管理工具显示无法连接数据库
- 权限的问题 HTTP 401.1 - 未授权:登录失败
- 我想用Repeater动态生成多个TextBox,可否实现?
- web发布后登录界面从3个文本框变成两个文本框
- 代码删除文件夹内图片问题
我试过页面加载时触发change,不好使,达不到预期的效果
还有,MVC不是基于事件驱动的,只能靠js异步去。。
把你的model改造下 做个自定义的model。如你是要编辑的时候通俗点的ModelEdit
属性根据编辑需要自定义,城市那就定义一个省份和一个城市都为SelectList类型的属性,
然后再定义两个选中ID SelectedProvinceId、 SelectedCityId。
在属性访问器中写好该集合的获取方法,比如 var list=cityRespository.getCityByProvinceId(SelectedProvinceId);
这个SelectList和SelectListItem一样也有选中的参数重载。
每次刷新什么的,从数据源得到该数据的城市后相应的赋值到SelectedProvinceId、SelectedCityId就可以了。
然后页面赋值的使用用强类型页面,html元素标签的name名字和你的自定义类的属性保持一直,提交的时候可以直接用类来获取了。
建议使用@Html.DropDownList("SelectedProvinceId",list,new{@onchange="function()"})
提交的ActionResult(ModelEdit model)
model.SelectedProvinceId 就是你页面选的ID。
这是小弟之前实现的方式,总体思路就是这样,如有不足和错误之处请见谅。