кажется, что вся страница обновляется, даже если я использую Ajax.Beginform - PullRequest
0 голосов
/ 12 сентября 2009

У меня есть следующий код, который я пытаюсь изменить с обычной страницы на страницу ajax, поэтому при отправке формы я обновляю только div LInkList Я изменяю строку использования, чтобы использовать Ajax.BeginForm

Вот код просмотра:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div id="LinkList">
    <% Html.RenderPartial("TestUserControl", Model); %>
</div>
<%using (Ajax.BeginForm("AddNewLink", "Test", new AjaxOptions { UpdateTargetId = "LinkList" }))
  { %>
<fieldset style="text-align: left">
    <legend>Add New Link</legend>
    <table>
        <tr>
            <td>
                Url:
            </td>
            <td>
                <input style="width: 500px" type="text" name="url" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="Add Link" name="submit" />
            </td>
        </tr>
    </table>
</fieldset>
<% } %>

Вот код контроллера:

   [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult AddNewLink(FormCollection collection_)
    {
        string url = collection_["url"].ToString();

        Test test = new Test();
        test.Name = DateTime.Now.ToString();

        if (Request.IsAjaxRequest())
        {
            return PartialView("TestUserControl", test);
        }

        return View("Index", test);
    }

Есть идеи, почему в этом случае обновляется вся страница, а не что внутри тега div? Request.IsAjaxRequest () всегда возвращает false.

1 Ответ

5 голосов
/ 12 сентября 2009

Обновляется ли вся страница или вся страница перерисовывается внутри вашего DIV. Если первое, я подозреваю, что у вас может быть ошибка javascript на странице, которая сделает вашу обработку AJAX работоспособной и заставит ее сделать полный пост. Проверьте это с помощью отладки IE8 или Firefox / Firebug. Вам необходимо иметь файлы MicrosoftAjax.js и MicrosoftMvcAjax.js на каждой странице, где вы используете методы AjaxHelper.

Если последнее, и я думаю, что в конечном итоге у вас возникнет эта проблема, это потому, что вы возвращаете весь вид независимо от того, получаете ли вы страницу через AJAX или полный пост. Добавьте некоторый код в ваш метод, чтобы он возвращал только частичное представление, которое вы заменяете, когда запрос выполняется через AJAX.

 var container = GetContainer(ds1);
 if (request.IsAjaxRequest())
 {
      return PartialView( "LinkList", container );
 }
 else 
 {
      return View( "Index", container );
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...