Po pierwsze, jestem noobem ASP.NET MVC. To mój pierwszy projekt z ASP.NET MVC, więc wciąż się uczę. Moje doświadczenie jest głównie w WPF i XAML od dwóch lat.
Oto mój problem: Mam trzy kaskadowe listy listBox. Drugie dane listbox są zależne od pierwszego, a trzecie od drugiego. Chcę użyć odświeżania Ajax, aby wypełnić dane na każdej liście.
Oto mój Index.cshtml:
@model WebApplication.Models.DevelopmentModel
<!DOCTYPE html>
<html>
<head>
<title>Dashboard</title>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
</head>
<body class="body" scroll="auto">
<div class="page">
<div class="content">
<div id="lists">
@Html.Partial("DevelopmentListsView", Model)
</div>
</div>
</div>
</body>
</html>
Mój DevelopmentListsView.cshtml wygląda tak:
@model WebApplication.Models.DevelopmentModel
@using (Ajax.BeginForm("Index", "Development", new AjaxOptions() { UpdateTargetId = "lists" } ))
{
@Html.ListBoxFor(m => m.SelectedApplication, new SelectList(ViewBag.Applications), new { onchange = "this.form.submit();" })
@Html.ListBoxFor(m => m.SelectedVersion, new SelectList(ViewBag.Versions), new { onchange = "this.form.submit();" })
@Html.ListBoxFor(m => m.SelectedFlow, new SelectList(ViewBag.Flows) )
}
Mój model wygląda jak:
public class DevelopmentModel
{
public string SelectedApplication { get; set; }
public string SelectedVersion { get; set; }
public string SelectedFlow { get; set; }
}
A mój kontroler wygląda tak:
public class DevelopmentController : Controller
{
//
// GET: /Development/
public ActionResult Index()
{
FillViewBag();
return View(new DevelopmentModel());
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(DevelopmentModel model)
{
FillViewBag(model);
return PartialView("DevelopmentListsView", model);
}
private void FillViewBag(DevelopmentModel model = null)
{
//Magic to get all three lists dependent on the available data in the model:
ViewBag.Applications = applications;
ViewBag.Versions = versions;
ViewBag.Flows = flows;
}
}
Teraz chcę użyć wywołań zwrotnych Ajax do pobraniadanych, więc nie odświeży się za każdym razem, ale gdy kliknę jeden z elementów Listbox, strona pokaże wtedy tylko widok DevelopmentListsView, nie odświeżając niczego ..
Czy ktoś może mi powiedzieć, co robię źle?
Dzięki za spojrzenie!
Odpowiedzi:
3 dla odpowiedzi № 1Wymyśliłem własne pytanie:
Miałem dwa błędy:
Brakowało mi skryptu jquery w Index.cshtml:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
Użyłem niewłaściwego przesłania (powinno to być zgłoszenie jQuery):
$(this.form).submit()
Przesłanie umieszczone w moich modelach
@model WebApplication.Models.DevelopmentModel
@using (Ajax.BeginForm("Index", "Development", new AjaxOptions() { UpdateTargetId = "lists" } ))
{
@Html.ListBoxFor(m => m.SelectedApplication, new SelectList(ViewBag.Applications), new { onchange = "$(this.form).submit()" })
@Html.ListBoxFor(m => m.SelectedVersion, new SelectList(ViewBag.Versions), new { onchange = "$(this.form).submit()" })
@Html.ListBoxFor(m => m.SelectedFlow, new SelectList(ViewBag.Flows) )
}
Mam nadzieję, że pewnego dnia to pomoże komuś;).