【发布时间】:2015-09-01 18:22:32
【问题描述】:
我对 MVC 很陌生,我正在尝试创建一个级联下拉菜单。用户将选择诊所的名称,下面的下拉菜单将填充在该诊所工作的配镜师的姓名。
眼镜师模型:
public class Optician
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid OpticianId { get; set; }
[ForeignKey("User")]
public string UserId { get; set; }
public virtual ApplicationUser User { get; set; }
public IEnumerable<SelectListItem> UserList { get; set; }
[ForeignKey("Practice")]
public Guid PracticeId { get; set; }
public virtual Practice Practice { get; set; }
public IEnumerable<SelectListItem> PracticeList { get; set; }
public virtual ICollection<ApplicationUser> Users { get; set; }
public virtual ICollection<Practice> Practices { get; set; }
}
实践模型:
public class Practice
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name = "Practice")]
public Guid PracticeId { get; set; }
[Display(Name = "Practice Name")]
public string PracticeName { get; set; }
public virtual ICollection<Optician> Opticians { get; set; }
public virtual ICollection<Booking> Bookings { get; set; }
}
应用用户模型:
public class ApplicationUser : IdentityUser
{
[Display(Name = "Title")]
public string Title { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
}
控制器:
public ActionResult TestDropDown()
{
var practices = new SelectList(db.Practices, "PracticeId", "PracticeName");
ViewData["Practices"] = practices;
return View();
}
[HttpPost]
public JsonResult Opticians(Guid? Id)
{
var opticianList = db.Opticans.Where(a => a.PracticeId == Id).Select(a => a.User).ToList();
return Json(opticianList, JsonRequestBehavior.AllowGet);
}
观点:
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script>
$(document).ready(function () {
$("#Optician").prop("disabled", true);
$("#Practice").change(function () {
$.ajax({
url : "@Url.Action("Opticians","Bookings1")",
type : "POST",
data : {Id : $(this).val() }
}).done(function(OpticianList){
$("#Optician").empty();
for (var i = 0; i < OpticianList.length; i++) {
$("#Optician").append("<option>" + OpticianList[i].FirstName + "</option>");
}
$("#Optician").prop("disabled", false);
});
});
});
</script>
@using (Html.BeginForm("TestDropDown", "Bookings1", FormMethod.Post))
{
@Html.AntiForgeryToken()
<h4>Select Practcie & Opticians</h4>
<hr />
@Html.ValidationSummary()
<div class="form-group">
@Html.Label("Select Practice :", new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownList("PracticeId", ViewData["Practices"] as SelectList, new { @class = "form-control" })
</div>
</div><br />
<div class="form-group">
@Html.Label("Select Optician :", new { @class = "col-md-2 control-label" })
<div class="col-md-10">
<select id="Optician"></select>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Submit" />
</div>
</div>
}
我可以选择诊所的名称,但没有填充眼镜师名字的下拉菜单。 任何帮助将不胜感激 谢谢
【问题讨论】:
-
您在浏览器控制台中遇到什么错误?
-
如果您只想要
ApplicationUser的FirstName属性,那么它应该是.Select(a => a.User.FirstName)- 当您甚至不需要时将大量额外数据发送回浏览器是没有意义的使用它 -
@StephenMuecke 谢谢。浏览器控制台没有错误
-
$("#Practice").change(function () {函数永远不会被击中 - 你的第一个下拉菜单是<select id=PracticeId" ..>而不是Practice。 -
@StephenMuecke 谢谢斯蒂芬,我改变了它,眼镜商下拉菜单似乎正在填充,但下拉菜单中的两个选项显示为“未定义”
标签: c# jquery ajax asp.net-mvc