ViewModel - 在ajax请求之后用新内容重新填充表单

时间:2013-01-02 10:22:26

标签: c# json asp.net-mvc-3 viewmodel

当我调用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);
    }
}

1 个答案:

答案 0 :(得分:1)

将返回HTML。我是否可以建议您返回PartailView(model),这样可以在整个系统中使用,您只需使用json return 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);
    }
});

ajax中,您需要将HTML替换为返回,在这种情况下,您已拨打myViewModel。即如果它是一张桌子那么你会做

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

这将用新HTML替换表