Ajax постбэки с каскадным ListBox в ASP.NET MVC3 - PullRequest
1 голос
/ 08 августа 2011

Во-первых, я нуб ASP.NET MVC. Это мой первый проект с ASP.NET MVC, поэтому я все еще учусь. Последние два года я работал в WPF и XAML.

Итак, вот моя проблема: у меня есть три каскадных списка. Второй список данных зависит от первого, а третий зависит от второго. Я хочу использовать обновления Ajax для заполнения данных в каждом списке.

Вот мой 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>

Мой DevelopmentListsView.cshtml выглядит так:

@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) )
}

Моя модель выглядит так:

public class DevelopmentModel
{
    public string SelectedApplication { get; set; }
    public string SelectedVersion { get; set; }
    public string SelectedFlow { get; set; }
}

И мой контроллер выглядит так:

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;
    }

}

Теперь я хочу использовать обратные вызовы Ajax для извлечения данных, чтобы они не обновлялись каждый раз, но когда я щелкаю по одному из элементов списка, на этой странице отображается только представление DevelopmentListsView после этого, но ничего не обновляется. .

Может кто-нибудь сказать мне, что я делаю не так?

Спасибо за внимание!

1 Ответ

3 голосов
/ 08 августа 2011

разобрался со своим вопросом:

У меня было две ошибки:

Я пропустил сценарий jquery, включенный в 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>

И я использовал неверную отправку (это должна была быть отправка jQuery):

$(this.form).submit()

Подтверждение размещено внутри моих моделей

@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) )
}

Надеюсь, это когда-нибудь кому-нибудь поможет;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...