2

タブがあるダイアログ ボックスがあります。タブの 1 つに、ユーザーが入力したアドレスが表示されます。ユーザーが新しいアドレスを追加できるボタンもあります。ユーザーがボタンをクリックすると、現在のタブの内容が「追加」ビューに置き換えられます。

ここで達成しようとしているのは、ユーザーがアドレスを追加できるようにすることです。[OK] をクリックすると、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" }))

では、私のセットアップの何が問題なのですか?

4

1 に答える 1

5

次のスクリプトがページに含まれていることを確認してください。

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
于 2011-07-04T10:10:59.327 に答える