Как сохранить выбранное значение выпадающего списка после обратной передачи?
Я новичок в разработке MVC, у меня есть 4 dropbox, и каждый выпадающий вызывает следующий объект dpdown для привязки значений.
Я привязываю gridview (codeplex mvc.grid) после того, как все выпадающие списки выбраны, и нажимаю мою кнопку.
Мой вопрос:
Как сохранить выбранное значение выпадающего списка после обратной передачи?
Спасибо за вашу помощь
Посмотреть:
@using (Html.BeginForm("Checklist", "Home"))
{`
<div>Dp1</div>
@Html.DropDownList("dpCompany", ViewBag.CompanyList as List<SelectListItem>, new { @class = "btn btn-default dropdown-toggle" })
<div>Dp2</div>
@Html.DropDownList("dpBank", ViewBag.CompanyList as List<SelectListItem>, new { @class = "btn btn-default dropdown-toggle" })
<div>Dp3</div>
@Html.DropDownList("dpStartCheckList", ViewBag.CompanyList as List<SelectListItem>, new { @class = "btn btn-default dropdown-toggle" })
<div>>Dp4</div>
@Html.DropDownList("dpEndCheckList", ViewBag.CompanyList as List<SelectListItem>, new { @class = "btn btn-default dropdown-toggle" })`
<input type="submit" name="CheckList" value="DO" class="btn btn-default" />
}
@Html.Grid(Model).Columns(columns =>
{
columns.Add(c => c.customer_reference).Titled("Çek No").SetWidth(30);
columns.Add(c => c.unvan).Titled("Ünvan").SetWidth(30);
columns.Add(c => c.vergi_no).Titled("Vergi No").SetWidth(30);
columns.Add(c => c.islem_tarihi).Titled("İşlem Tarihi").SetWidth(30).Format("{0:dd/MM/yyyy}");
columns.Add(c => c.currency).Titled("Para Birimi").SetWidth(30);
columns.Add(c => c.full_curr_amount).Titled("Tutar").SetWidth(30).Format("{0:C}").Css("align-right");
}).WithPaging(10)
скрипт
$(function () {
// Company
$('#dpCompany').on('change', function () {
var stateDropdown = $('#dpBank');
//disable state drop down
stateDropdown.prop('disabled', 'disabled');
//clear drop down of old states
stateDropdown.empty();
//retrieve selected country
var company = $(this).val();
if (company.length > 0) {
// retrieve data using a Url.Action() to construct url
$.getJSON('@Url.Action("GetBankList")', {
company: company
})
.done(function (data) {
//re-enable state drop down
stateDropdown.removeAttr('disabled');
//for each returned state
$.each(data, function (i, state) {
var values = state.split('|');
//Create new option
var option = $('<option value="' + values[0] + '" />').html(values[1]);
//append state states drop down
stateDropdown.append(option);
});
//if count 1 bind
if ($("#dpBank option").length == 1) {
$("#dpBank").trigger("change");
}
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
});} });
//
$('#dpBank').on('change', function () {
var stateDropdown = $('#dpCheckStart');
//disable state drop down
stateDropdown.prop('disabled', 'disabled');
//clear drop down of old states
stateDropdown.empty();
//retrieve selected country
var bank = $(this).val();
var company = $("#dpCompany").val();
if (company.length > 0) {
// retrieve data using a Url.Action() to construct url
$.getJSON('@Url.Action("GetCheckList")', {
companyCode: company,
bankCode: bank
})
.done(function (data) {
//re-enable state drop down
stateDropdown.removeAttr('disabled');
//for each returned state
$.each(data, function (i, state) {
var values = state.split('|');
//Create new option
var option = $('<option value="' + values[0] + '" />').html(values[1]);
//append state states drop down
stateDropdown.append(option);
});
//if count 1 bind
if ($("#dpBank option").length == 1) {
$("#dpCheckStart").trigger("change");
}
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
}) } });
$('#dpCheckStart').on('change', function () {
var stateDropdown = $('#dpCheckEnd');
//disable state drop down
stateDropdown.prop('disabled', 'disabled');
//clear drop down of old states
stateDropdown.empty();
//retrieve selected country
var startOver = $(this).val();
if (startOver.length > 0) {
// retrieve data using a Url.Action() to construct url
$.getJSON('@Url.Action("GetListOver")', {
startOver: startOver
})
.done(function (data) {
//re-enable state drop down
stateDropdown.removeAttr('disabled');
//for each returned state
$.each(data, function (i, state) {
var values = state.split('|');
//Create new option
var option = $('<option value="' + values[0] + '" />').html(values[1]);
//append state states drop down
stateDropdown.append(option);
})
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
})}});
контроллер
public ActionResult Index()
{
ViewBag.Message = "";
LoadDefaults();
ViewBag.Loaded = false;
return View();
}
private void LoadDefaults()
{
ViewBag.BaseList = new List<SelectListItem>();
ViewBag.CompanyList = new List<SelectListItem>();
ViewBag.BankList = new List<SelectListItem>();
ViewBag.AmountTotalTable = new Dictionary<string, string>();
}
[Authorize]
public ActionResult CheckList(FormCollection form)
{
ViewBag.Message = "";
ViewBag.StartSelectedItem = StartCheckNo = form["dpStartCheckList"];
ViewBag.EndSelectedItem = EndCheckNo = form["dpEndCheckList"];
F8BaseDB.DbSchema.F8BaseSchema.CheckList chk = new F8BaseDB.DbSchema.F8BaseSchema.CheckList();
LoadDefaults();
return View("Index", chk.GetAll(ViewBag.StartSelectedItem, ViewBag.EndSelectedItem));
}
2 ответа
Хорошо, есть несколько способов достичь этого. Если это возможно, я настоятельно рекомендую, чтобы вы строго указали свою точку зрения. Это позволит вам легко получить доступ к опубликованным данным формы, а не проходить через FormCollection
, Это также позволит вам вернуть Model
Вернемся к представлению, которое автоматически выберет выпадающий список компаний (который, как я полагаю, по умолчанию заполнен всеми компаниями и не проходит через ajax, чтобы получить их).
Итак, чтобы ответить на ваш вопрос. Как будто вы получаете значения dpStartCheckList
а также dpEndCheckList
сохранить значения двух других выпадающих ViewBag
, Теперь, по вашему мнению, сделайте следующее. сохранить значения из viewbags в переменные js
var selectedCompany = '@ViewBag.SelectedCompany'
var selectedBank = '@ViewBag.SelectedBank'
var startSelectedItem = '@ViewBag.StartSelectedItem'
и так далее.
Теперь в каждом соответствующем аяксе done
обратные вызовы, после добавления элементов в раскрывающийся список с помощью $.each
Вы устанавливаете соответствующее значение в раскрывающемся списке. например, если вы берете банк выпадающий. после $.each
$("#dpBank").val(selectedBank);
ОБНОВЛЕНИЕ смотрите это видео YouTube, оно говорит о строго типизированных просмотров https://www.youtube.com/watch?v=xRinkoUpEEM
ОБНОВЛЕНИЕ 2, если вы используете этот метод, пожалуйста, не забудьте установить переменные js в '' или неопределенные после его установки.
$("#dpBank").val(selectedBank);
selectedBank = '';
В противном случае он выберет те же значения из выпадающего списка в будущих вызовах Ajax, если это значение присутствует в опциях
Вам нужно использовать Html.DropdwonlistFor
@Html.DropDownListFor(m => m.ClientID, new SelectList(Model.Clients, "ID", "ClientName"), new { @class = "form-control" })
где m.ClientID - выбранное значение