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),这样它就可以在整个系统中使用,你不需要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 替换表格

于 2013-01-02T10:25:40.250 回答