1

AJAX Get/Post を呼び出すとViewModel、フォームの を Controller メソッドに送信できます。このリクエストの後にフォームに新しい値を再入力する方法はありViewModelますか? 私のメソッドの正しい戻り値: ViewModel または View を持つ Json? このような:

$.ajax({
    dataType: "JSON",
    data: $('#form').serialize(),
    type: "GET",
    url: "SomeController/doSomething",
    success: function(myViewModel) {
        // How to repopulate my form with the new values?
    }
});

public class SomeController {

    [HttpGet]
    public ActionResult DoSomething(MyViewModel model) {

        model.SomeProperty = "This property needs to be changed into the View.";

        // The right way is returning a Json with the ViewModel...
        return Json(model, JsonRequestBehavior.AllowGet);
        // or return some View?
        return View(model);
    }
}
4

1 に答える 1

1

返されるのは ですHTML。を返すことをお勧めできますか。この方法では、システム全体で使用できます。エンコードするPartailView(model)必要はなく、 を使用するだけです。部分ビューをフォルダーに入れます。jsonreturn PartialView(model)Shared

public ActionResult DoSomething(MyViewModel model) {


    model.SomeProperty = "This property needs to be changed into the View.";


    return PartialView("MyPartialView", model);
}

ajax を変更してフォームを文字列化します。これにより、モデル バインディングが機能するようになります。

$.ajax({
    dataType: "JSON",
    data: JSON.stringify({model : $('#form').serialize() }),
    type: "GET",
    url: "SomeController/doSomething",
    success: function(myViewModel) {
        $('#myUlDropDownListID').replaceWith(myViewModel);
    }
});

あなたの を returnajaxに置き換える必要があります。HTMLこの場合、 を呼び出していmyViewModelます。つまり、それがテーブルであれば、あなたはそうするでしょう

$('#myUlDropDownListID').replaceWith(myViewModel);

これにより、テーブルが新しい HTML に置き換えられます

于 2013-01-02T10:25:40.250 に答える