/ / Odbicia Ajax z kaskadowaniem ListBox w ASP.NET MVC3 - c #, asp.net-mvc-3

Publikacje postów Ajax z kaskadowym ListBox w ASP.NET MVC3 - c #, asp.net-mvc-3

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 № 1

Wymyś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ś;).