Oto mój pogląd na obraz Problemy Kaskadowe dropdownlist, generowany rozwijana nie publikuje wybrane wartości do serwera
Kod działa poprawnie, ale ...
Kiedy przesłać formularz, to wysyła tylko wartość pierwszej listy rozwijanej (sprawdziłem na sieciach otrzymanych w przeglądarce argumenty), także gdy przeglądam źródło strony, nie pokazuje wygenerowanych opcji, które wygenerowałem za pomocą funkcji ajax.
Oto mój kod
Action które generują mój pierwszy DropdownList
public ActionResult TwoDropDownList()
{
HotelContext H = new HotelContext();
ViewBag.DropDownListOne = new SelectList(H.Continent.ToList(), "Id", "Name");
return View();
}
Akcja że powrót json drugich danych DropdownList
[HttpPost]
public JsonResult UpdateCountryDropDownList(int ContinentId)
{
HotelContext H = new HotelContext();
List<SelectListItem> CountryNames = new List<SelectListItem>();
List<Country> Co = H.Country.Where(x => x.ContinentId == ContinentId).ToList();
Co.ForEach(x =>
{
CountryNames.Add(new SelectListItem { Text = x.Name, Value = x.Id.ToString() });
});
return Json(CountryNames , JsonRequestBehavior.AllowGet);
}
Moja Ajax wywołanie
@model Hotel.Models.Continent
<script>
$(document).ready(function() {
$("#Name").change(function() {
var ContinentoId = $(this).val();
$.ajax({
type: "POST",
dataType: "json",
data: { ContinentId: ContinentoId },
url: '@Url.Action("UpdateCountryDropDownList","Home")',
success: function (result) {
var Country = "<select id='ddlCountry'>";
Country = Country + '<option value="">--Select--</option>';
for (var i = 0; i < result.length; i++) {
Country = Country + '<option value=' + result[i].Value + '>' + result[i].Text + '</option>';
}
Country = Country + '</select>';
$('#Countries').html(Country);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(arguments)
}
});
});
})
</script>
moim zdaniem
@using(Html.BeginForm()){
SelectList se = ViewBag.DropDownListOne;
@Html.DropDownListFor(x=>x.Name,se,"--Select--")
<div id ="Countries">
@Html.DropDownList("ddlCountry",new List<SelectListItem>(),"--Select--")
</div>
<input type="submit" value="submit" style="margin-top:100px;" />
}
HttpPost Action
[HttpPost]
public string TwoDropDownList(string Name, string ddlCountry)
{
if (string.IsNullOrEmpty(Name) || string.IsNullOrEmpty(ddlCountry))
{
return ("you must select Both");
}
else
return ("everything is working fine");
}
Dzięki, że działasz dobrze –
Poza tymi błędami, reszta tego, co robisz, jest dość okropna - nie używasz modelu, używasz 'ViewBag', nie ma silnego powiązania typowego, sprawdzania poprawności strony po stronie klienta i słabej walidacji po stronie serwera. Polecam, abyś przestudiował kod w również polecam twoje badanie kodu w [to DotNetFiddle] (https://dotnetfiddle.net/1bPZym). –