Ajax.BeginForm没有做它应该做的事情?

时间:2011-07-04 10:04:26

标签: asp.net-mvc asp.net-mvc-3 asp.net-ajax ajax.beginform

我有一个对话框,其中有标签。在其中一个选项卡中,显示用户输入的地址。还有一个按钮,允许用户添加新地址。当用户单击该按钮时,当前选项卡的内容将替换为“添加”视图。

我在这里要完成的是允许用户添加地址,一旦他们点击确定,表单应该通过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 个答案:

答案 0 :(得分:5)

确保您已将以下脚本包含在您的页面中:

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