cshtml部分代码: <div class="editor-label"> @Html.Label("房间类型: ") @Html.DropDownList("TypeID", ViewBag.Types as IEnumerable<SelectListItem>, "--请选择--") @Html.Label("房间号: ") @Html.DropDownList("RoomID", ViewBag.Rooms as IEnumerable<SelectListItem>, "--请选择--") </div> js代码: <script type="text/javascript">// <![CDATA[ $(document).ready(function () { $("#TypeID").change(function () { var url = "/Guest/GetRoomNumber/" + $("#TypeID").val() + "/"; //规则是控制器/方法/参数 $.getJSON(url, function (data) { $('#RoomID').html(''); $.each(data, function (i, item) { $('#RoomID').append($("<option></option>").val(item.RoomID).html(item.Number)); }); }); }); });// ]]> </script> Controller的代码: public class GuestController : Controller { HotelManageEntities db = new HotelManageEntities(); public ActionResult Create() { ViewBag.Types = db.RoomType.ToList().Select(c => new SelectListItem { Value = c.TypeID.ToString(), Text = c.TypeName }); ViewBag.Rooms = db.Room.ToList().Select(c => new SelectListItem { Value = c.RoomID.ToString(), Text = c.Number }); } public JsonResult GetRoomNumber(int id) { HotelManageEntities context = new Models.HotelManageEntities(); var RoomNumber = from a in context.Room where a.TypeID == id select a; return Json(RoomNumber.ToList(), JsonRequestBehavior.AllowGet); } }
1——
在$("#TypeID").change事件中跟踪,确认这个事件被触发了
2——
确认你生成的URL地址,可以通过ALERT的方式查看
3——
确认你的URL地址能正确返回数据
4——
确认正确返回数据后的事件处理程序被正确的执行
查出来了,是由于查询的数据关联的表太多,导致死循环了。
@睡着的花花: 问题解决了就好。
@笨笨蜗牛: 请问如果上面的列子做三级联动怎么添加语句呢?
感觉怪怪的,ViewBag.Rooms = db.Room.ToList().Select(c => new SelectListItem { Value = c.RoomID.ToString(), Text = c.Number });
这句把房间全部加载进来? 没区房间分类型吗?