Может быть, это кому-нибудь поможет. Я использую две таблицы в моем приложении. Во-первых, я храню всю информацию, которую собираю из формы. Другой (Глоссарий) содержит марки и модели транспортных средств. У меня есть модели для обоих. Вот что я в итоге сделал.
Глоссарий модели:
public partial class Glossary
{
public int UniqueId { get; set; }
public Nullable<int> Category { get; set; }
public string Description { get; set; } //has both makes and models descriptions
public string VehicleMakeId { get; set; } //has references of Make's UniqueId for Models.
}
Вот как выглядит таблица в таблице ![This is what Makes looks like](https://i.stack.imgur.com/8SyH2.png)
Вот как выглядят модели MBW (UniqueId == 3532) в таблице ![enter image description here](https://i.stack.imgur.com/rmaLv.png)
Регистрация модели:
[DisplayName("Vehicle Make")]
public string VehicleMake { get; set; }
[DisplayName("Vehicle Model")]
public string VehicleModel { get; set; }
public List<SelectListItem> Glossary { get; set; } //referencing Glossary model in my view model
Контроллер регистрации:
//in public ActionResult Create()
IEnumerable<SelectListItem> CarMake = db.Glossaries.Where(x => x.Category == 1072).Select(x => new SelectListItem
{
Value = x.UniqueId.ToString(),
Text = x.Description
});
ViewBag.VehicleMake = CarMake;
//Json:
[HttpPost]
public JsonResult GetVehicleModels(string VehicleMake)
{
var VehicleModelList = db.Glossaries.Where(m => m.VehicleMakeId == VehicleMake).Select(m => new
{
VehicleModelId = m.UniqueId,
VehicleModelDescription = m.Description
}).ToList();
return Json(VehicleModelList, JsonRequestBehavior.AllowGet);
}
Просмотр:
<div class="form-group">
@Html.LabelFor(model => model.VehicleMake, htmlAttributes: new { @class = "control-label col-md-2 required" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.VehicleMake, (IEnumerable<SelectListItem>)ViewBag.VehicleMake, new { @class = "form-control", required = "required" })
@Html.ValidationMessageFor(model => model.VehicleMake, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.VehicleModel, htmlAttributes: new { @class = "control-label col-md-2 required" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.VehicleModel, Enumerable.Empty<SelectListItem>(), "Select vehicle's make first", new { @id = "VehicleModel", @class = "form-control", required = "required" })
@Html.ValidationMessageFor(model => model.VehicleModel, "", new { @class = "text-danger" })
</div>
</div>
<script type="text/javascript">
$("#VehicleMake").on('change', function () {
$('#VehicleModel option').remove();
$.ajax({
type: "POST",
url: "/Registration/GetVehicleModels",
data: JSON.stringify({ 'vehicleMake': $(this).val() }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
$.each(result, function (i, o) {
$('#VehicleModel').append('<option value=' + o.VehicleModelId + '>' + o.VehicleModelDescription + '</option>');
});
},
failure: function (response) {
alert("Could not retrieve vehicle model list. ");
},
error: function (response) {
alert("Something's not right... /n" + response.responseText);
}
});
});
</script>
Эта ссылка была полезной: https://www.aspsnippets.com/Articles/ASPNet-MVC-jQuery-AJAX-and-JSON-Example.aspx