Я хочу получить свойство объекта, основанное на передаче идентификаторов выбранных элементов из раскрывающегося списка каскадов ... При каждом изменении уровня 1 или уровня 2 каскадного выпадающего списка цена должна быть обновлена.Как получить значение свойства из базы данных на основе каскадного выпадающего списка выбранных значений?
Я реализовал каскадный выпадающий список. На странице загрузки Leaguedropdown (Уровень 1) заселяет и второй LeagueDivisiondropdown (Уровень 2) населяет при выборе любого пункта из уровня 1. я должен реализовать Калькулятор цен, который должен рассчитать значение цен в зависимости от выбранных элементов из каскадно капли вниз, все цены хранятся в базе данных, и я использую Entity Framework. Я использую метод .change() и отправляет запрос getJson для уровня 2, который работает нормально. Я также хочу, чтобы те же функции на Уровне 1, но я уже использовал метод .change() для заполнения LeagueDivision, поэтому у меня нет идеи, как реализовать это на Уровне 1 тоже.
Буду признателен, если кто-то поведет меня и будет благодарен.
Вот Посмотреть и письменность
<body>
<p id="message"></p>
@using (Html.BeginForm("PriceCalculatorIndex", "PriceCalculator", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<div>
@Html.LabelFor(m => m.SelectedLeague, new { @class = "control-lebel" })
@Html.DropDownListFor(m => m.SelectedLeague, Model.LeagueList, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.SelectedLeague)
</div>
<div>
@Html.LabelFor(m => m.SelectedLeagueDivision, new { @class = "control-lebel" })
@Html.DropDownListFor(m => m.SelectedLeagueDivision, Model.LeagueDivisionList, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.SelectedLeagueDivision)
</div>
<div>
@Html.LabelFor(m => m.Price)
@Html.DisplayFor(m => m.Price)
</div>
}
<!-- JS includes -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script>
<script type="text/javascript">
var leaguedivisionUrl = '@Url.Action("Fetchleaguedivision")';
var updatePrice = '@Url.Action("updatePrice")';
var divisions = $('#SelectedLeagueDivision');
$('#SelectedLeague').change(function() {
divisions.empty();
$.getJSON(leaguedivisionUrl, { ID: $(this).val() }, function (data) {
if (!data) {
return;
}
divisions.append($('<option></option>').val());
$.each(data, function (index, item) {
divisions.append($('<option></option>').val(item.Value).text(item.Text));
});
});
});
$('#SelectedLeagueDivision').change(function() {
$.getJSON(updatePrice, { LeagueDivisionId: $(this).val(), LeagueId: $('#SelectedLeague').val() }, function (data) {
if (!data) {
return;
}
alert(data);
//document.getElementById('#message').innerHTML = data;
});
});
</script>
JSON результат для выборки из базы данных цены
public JsonResult updatePrice(int LeagueId, int LeagueDivisionId)
{
HostBoostersDBEntities2 db = new HostBoostersDBEntities2();
CalculatorPrice updatedPrice = db.CalculatorPrices
.Where(x => x.LeagueId == LeagueId
&&
x.LeagueDivisionId == LeagueDivisionId)
.FirstOrDefault();
decimal updatedPriceToView = (decimal)updatedPrice.Price;
return Json(updatedPriceToView.ToString(), JsonRequestBehavior.AllowGet);
}
Вы можете сделать несколько вызовов AJAX в вашем файле '$ ('# SelectedLeague'). Изменение()' функцию (просто скопировать '$ .getJSON (updatePrice .. ..' после кода '$ .getJSON (leaguedivisionUrl, ... '(но измените значения, которые вы отправляете). Но вам нужно подумать о том, что произойдет, когда значение' SelectedLeagueDivision' будет 'null' - оно выкинет исключение, потому что параметр 'int' и требуется. –
@StephenMuecke, пожалуйста, взгляните на мой ответ ... Я ценю ваше руководство и поиск r руководство с вашей стороны .... спасибо – Sulaiman