ho una visione sul posto che contiene 2 @ Helpers di DropDownListFor:Popola DropDownList utilizzando AJAX MVC 4
@using (Html.BeginForm("CreateOneWayTrip", "Trips"))
{
@Html.ValidationSummary(false);
<fieldset>
<legend>Enter Your Trip Details</legend>
<label>Start Point</label>
@Html.DropDownListFor(m => m.StartPointProvince, (SelectList)ViewBag.Provinces, new { @Id = "province_dll", @class = "form-control" })
@Html.DropDownListFor(m => m.StartPointCity, (SelectList)ViewBag.Cities, new { @Id = "city_dll", @class = "form-control" })
<p style="float: none; text-align: center;">
<button type="submit" value="Create" class="btn btn-info btn-circle btn-lg">
<i class="fa fa-check"></i>
</button>
<button type="submit" value="Create" class="btn btn-warning btn-circle btn-lg">
<i class="fa fa-times"></i>
</button>
</p>
</fieldset>
}
Qui è il modello temporanea che uso per acquisire i dati:
public class CaptureCreateTrip
{
[Required]
[Display(Name = "Trip ID")]
public string TripID { get; set; }
[Required]
public string StartPointProvince { get; set; }
[Required]
public string StartPointCity { get; set; }
}
Uno dei I DropsDownList vengono popolati quando viene creata la pagina e il secondo verrà popolato in base all'opzione che l'utente sceglie nel primo DropDownList. Per raggiungere questo obiettivo, sto usando Ajax. Il javascript per uso simile a questo:
$("#province_dll").change(function() {
$.ajax({
url: 'getCities/Trips',
type: 'post',
data: {
provinceId: $("#province_dll").val()
}
}).done(function (response) {
$("cities_dll").html(response);
});
});
Ecco il Controllore della chiamate AJAX:
[HttpPost]
public ActionResult getCicites(int provinceId)
{
var lstCities = new SelectList(new[] { "City1", "City2", "City3" });
return Content(String.Join("", lstCities));
}
Fino a questo punto tutto funziona - Quando scelgo un valore in mia Provincia DropDown l'evento javascript si attiva e l'azione Controller restituisce i valori della select list a Cities DropDown, ma il problema è che i dati (del formato dei dati) restituiti dall'azione non sono corretti. Ho verificato questo problema creando un elemento Paragrafo e aggiornando il suo testo con il valore di ritorno della chiamata ajax, che è: "System.Web.Mvc.SelectListItemSystem.Web.Mvc.SelectListItemSystem.Web.Mvc.Select ListItem"
* Nota: sono nuovo di Ajax e in fase di apprendimento di Jquery e AJAX.
nel tuo ge azione tCities, puoi mettere "var options = String.Join (" ", lstCities); return Content (opzioni); "invece di" return Content (String.Join ("", lstCities "));" e quindi controllare la variabile delle opzioni prima di tornare per vedere quali sono i negozi? –