2

jQueryを使用してPartialViewである編集フォームをdivにロードしようとしています。EditUserアクションをオーバーロードしています。1つ目は、IDを渡し、既存の詳細をフォームにロードするためのものです。2つ目は、保存のためにフォームをポストバックするためのものです。しかし、jQueryとUrl.Actionを使用してロードすると、2番目のメソッドが呼び出されるようです。2番目のEditUserメソッドをコメントアウトすると、1番目のメソッドが呼び出されます。何故ですか?どうすればstaffIDを渡したときに最初のものを呼び出すことができますか?または、この編集フォームを部分ビューシナリオで実装するためのより良い方法はありますか?

また、CreateUserアクションは、1つにはパラメーターがなく、もう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();
}
4

1 に答える 1

1

jQuery .load()によると、「データがオブジェクトとして提供される場合はPOSTメソッドが使用されます。それ以外の場合は、GETが想定されます。」データを提供しているので.load()、メソッド「POST」を使用しているため、2番目EditUser()が呼び出されています。

于 2011-12-14T23:16:10.787 に答える