asp.net MVC Ajax-запрос не работает корректно - PullRequest
0 голосов
/ 26 марта 2009

Я не могу понять, почему этот запрос Ajax не запускается правильно. Для простоты я пытался реализовать Ajax-запрос, используя этот учебник . Однако я не могу заставить свой контроллер распознавать запрос как таковой. Я попытался поместить Ajax.ActionLink в div для обновления (вне этого здесь).

Использование Response.Write для размещения Datetime, тот, который находится внутри Div, действительно обновляется, в то время как тот, который находится вне целевого div, не обновляется (как и ожидалось). Я не слишком знаком с тем, как работает библиотека MS Ajax, но на первый взгляд кажется, что она обновляет правый раздел страницы, но мой контроллер не распознает тип запроса и поэтому выводит неверную информацию.

...
    <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.2.6.min.js" type="text/javascript"></script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="chart" id="divChart">
        <% Html.RenderPartial("GraphView", Model); %>
        <br />
        <% Response.Write(DateTime.Now); %>
        <br />
    </div>
    <%= Ajax.ActionLink("no parameters", "MyWorkouts", new AjaxOptions{ UpdateTargetId = "divChart"}) %>
    <%= Ajax.ActionLink("id parameter", "MyWorkouts", new {chtype=1},new AjaxOptions { UpdateTargetId = "divChart", OnBegin = "beginContactList", OnSuccess = "successContactList", OnFailure = "failureContactList" })%>
    <%= Ajax.ActionLink("all parameters", "MyWorkouts", new {chtype=2, range=ViewData["daterangevalue"]},new AjaxOptions { UpdateTargetId = "divChart", OnBegin = "beginContactList", OnSuccess = "successContactList", OnFailure = "failureContactList" })%>
    <br />
    <% Response.Write(DateTime.Now); %>
    <h2>
...

А потом мой ActionResult выглядит так ...

[AcceptVerbs(HttpVerbs.Get)]
        public ActionResult MyWorkouts(int? chtype, int? range) {
            int dateRange = 3;

             // do some stuff here - left out for readability

            if (Request.IsAjaxRequest()) {
                if (range != null) {
                    dateRange = (int)range;
                }

            }

           //do some other stuff...

            if (Request.IsAjaxRequest()) {
                return PartialView("GraphView", workouts);
            } else {
                return View(workouts);
            }
        }

(По умолчанию все по умолчанию, так как это всего лишь тестовая страница для реализации, как только я это выясню). В результате я продолжаю получать полный обзор внутри целевого div.

Ответы [ 3 ]

0 голосов
/ 26 марта 2009

Похоже, вы используете более старую версию MVC framework?

Если это так, я рекомендую выполнить обновление до версии выпуска и убедиться, что вы используете новейшие сценарии jquery и mvc ... В работу метода Request.IsAjaxRequest () были внесены некоторые изменения, которые могут быть связаны с вашей проблемой.

Кроме того, если там задействован вызов RedirectToAction, вы можете прочитать о подобной проблеме здесь .

0 голосов
/ 30 декабря 2009

Не отображается в опубликованном вами фрагменте, но, скорее всего, у вас есть теги формы / формы. Они мешают Ajax.BeginForm, который также генерирует теги формы. После удаления тегов внешней формы Request.IsAjaxRequest вернет true.

0 голосов
/ 26 марта 2009

Я не уверен, в чем проблема, но Fiddler и RouteDebugger могут помочь в его устранении.

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