使用编辑表单加载部分视图不会正确过载

时间:2011-12-14 22:05:55

标签: forms asp.net-mvc-3 razor asp.net-mvc-partialview

我正在尝试使用jQuery将一个编辑表单(PartialView)加载到div中。我正在重载EditUser操作。第一个用于传递id并使用现有细节加载表单。第二个用于回发表单以进行保存。但是当我使用jQuery和Url.Action加载时,似乎调用了第二种方法。如果我注释掉第二个EditUser方法,那么它会调用第一个方法。这是为什么?当我通过staffID时,如何让它调用第一个?或者是否有更好的方法在局部视图场景中实现此编辑表单?

CreateUser动作工作正常,因为重载方法没有歧义,因为1没有参数,另一个模型作为参数。

由于

这是我的控制者:

    public PartialViewResult EditUser(String staffId)
    {
        User um = userService.GetUserDetails(1, staffId, true);
        return PartialView(um);
    }

    [HttpPost]
    public PartialViewResult EditUser(User um)
    {
        if (!TryUpdateModel(um))
        {
            ViewBag.updateError = "Edit Failure";
            return PartialView("EditUser", um);
        }

        userService.CreateUpdateUser(um);
        return PartialView("ViewUser", um);
    }

    public PartialViewResult CreateUser()
    {
        ViewBag.Message = "Create New User";
        return PartialView(new User());
    }

    [HttpPost]
    public ActionResult CreateUser(User um)
    {

        if (!TryUpdateModel(um))
        {
            ViewBag.updateError = "Create Failure";
            return PartialView(um);
        }

        userService.CreateUpdateUser(um);
        return View("Index");
    }

这就是我加载EditUser部分视图的方式:

function menuEdit() {
    $('#ActionMenu').hide();
    $('#SearchBar').hide();
    $('#SearchPanel').hide();
    $('#SearchResult').hide();
    $('#AddViewEditUser').load("@Url.Action("EditUser","User")", {staffId : sId});
    $('#AddViewEditUser').show();
}

1 个答案:

答案 0 :(得分:1)

根据jQuery .load()“如果数据作为对象提供,则使用POST方法;否则,假定为GET。”由于您提供数据,.load()正在使用“POST”方法,因此您的第二个EditUser()正在被调用。