Ajax.BeginForm не делает то, что он должен делать? - PullRequest
2 голосов
/ 04 июля 2011

У меня есть диалоговое окно, в котором есть вкладки. На одной из вкладок отображаются адреса, введенные пользователем. Также есть кнопка, которая позволяет пользователю добавить новый адрес. Когда пользователь нажимает кнопку, содержимое текущей вкладки заменяется видом «Добавить».

То, что я пытаюсь сделать здесь, - это позволить пользователю добавить адрес, и как только он нажмет кнопку «ОК», форма должна быть отправлена ​​с помощью вызова AJAX, а затем вкладка должна быть обновлена ​​с содержанием «» Индекс "представление (которое отображает адреса пользователя).

К сожалению, это не работает должным образом. Вместо отправки формы с помощью вызова AJAX, он выполняет обычное действие публикации и отображает представление «Индекс» на белом фоне, а не отображает его на вкладке.

Вот мой код:

    [HttpPost]
    public ActionResult Add(AddressDto model)
    {
        if(!ModelState.IsValid)
        {
            return PartialView(model);
        }
        Area area = null;
        if(!string.IsNullOrEmpty(model.Area))
        {
            area = _addressService.GetAreaByName(model.Area);
        }
        var newAdd = new Address
                         {
                             Details = model.Details,
                             Name = model.Name,
                             IsDefaultAddress = false,
                             CountryName = _addressService.GetCountryById(int.Parse(model.Country)).Name,
                             User = _helper.GetUserFromSession(HttpContext.User.Identity.Name)
                         };
        if(area != null)
            area.Addresses.Add(newAdd);
        else 
            _addressService.Create(newAdd);
        _unitOfWork.Commit();
        var indexViewModel = PrepareIndexView();
        return PartialView("Index", indexViewModel);
    }

    private UserLocationViewModel PrepareIndexView()
    {
        var nickname = this.HttpContext.User.Identity.Name;
        var user = _helper.GetUserFromSession(nickname, true);
        var viewModel = Mapper.Map<User, UserLocationViewModel>(user);
        return viewModel;
    }

А вот как я начинаю форму:

@using (Ajax.BeginForm("Add", "Address", new AjaxOptions { UpdateTargetId = "ui-tabs-2", InsertionMode = InsertionMode.Replace, HttpMethod = "POST" }))

Так что не так с моей настройкой?

1 Ответ

5 голосов
/ 04 июля 2011

Убедитесь, что вы включили следующий скрипт на свою страницу:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
...