Перенаправление Ajax не работает так же, как ActionLink - PullRequest
2 голосов
/ 03 ноября 2011

У меня есть функция javascript, которая работает так, как мне хотелось бы:

<script language="javascript" type="text/javascript">
    function dofunction(dropdown) {
        debugger;
        for (i = 0; i < 194; i++) {
            if (dropdown[i].selected == true) {
                var Shrt_ttls = dropdown[i].value.toString();
                $.ajax({
                    url: "/ProgramSummary/Details?titl=" + Shrt_ttls//,
                    //type: 'Post'
                });
                i = 195;
            }
        }
        return;
    }
</script>

Код перенаправляет на ProgramsummaryController на метод Details (в отладке все работает нормально, и правильное значение передается методу иметод Details выглядит следующим образом:

    public ActionResult Details(string titl)
    {
        using (var dc = new USP_Select_TRP_ProgramSummary_wShortNameDataContext())
        {
            string shrt_titles = titl;
            if (shrt_titles == null)
            {
                shrt_titles = "3DELRR";
            }
            return View(dc.usp_Select_TRP_ProgramSummary_wShortName(shrt_titles).Single());
        }
    }

Вид вызывается и выглядит нормально и возвращается к _Layout.cshtml, все выглядит нормально, но представление Details не отображается, а вместо этого отображается исходное представление Index.Где, как будто я использую

@Html.ActionLink("Resource(s)", "Details", "ProgramSummary", new { titl = "3DELRR"})

Происходят те же события, что и раньше, и вместо остального представления индекса появляется подробное представление. Почему первый способ не работает?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

Вы должны использовать:

location.href = "/ProgramSummary/Details?titl=" + Shrt_ttls;

вместо Ajax, ajax - это запрос только в javascript, он не отображается браузером, если вы не кодируете его.

0 голосов
/ 03 ноября 2011

Вызов $.ajax делает асинхронный запрос javascript к вашему действию контроллера.Затем ваш контроллер возвращает представление (html) в качестве ответа.Вам нужно взять этот html и что-то с ним сделать:

$.ajax({
    url: 'whatever',
    success: function(data) {
        $('#sometarget').html(data);
    }
}

Кроме того, поскольку это AJAX-запрос, вам, вероятно, следует вернуть PartialView, а не полный просмотр в вашем контроллере:

return PartialView("SomePartialView", model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...