通过Ajax将强类型视图模型传递给控制器​​作为参数

时间:2017-11-20 23:36:04

标签: c# json ajax razor asp.net-mvc-5

我在这里看了20个答案,重新考虑了这些,但似乎没有一个对我有用。他们看起来都很苛刻。

我有这个巨大的View模型,我试图通过Ajax在两个PartialViewResults之间来回传递。但是,似乎没有任何效果。

以下是我的代码的“通用”版本:

控制器

public PartialViewResult _View1(Model model)
{
  return PatialView(model);
}

*I have another one of these for Partial view2*

查看

<div id="div1">Load View 1 here</div>

<script>
var m = @Html.Raw(Json.Encode(Model));
    console.log(m);
    $.ajax({
        url: '@Url.Action("_View1")',
        data: {'model' : m},
        dataType: "html",
        success: function (result) {
            $("#View1").html(result);
        },
        error: function (e) {
            $("#View1").html("<div class='alert alert-danger' role='alert'>Error: Getting View.</div>");
        }
    });
</script>

我在我的ajax调用上尝试了各种配置。任何帮助都会很棒,谢谢你。 我不想将视图模型的每个变量存储到变量中并将它们单独传递给控制器​​。视图模型对此来说太大了。

*注意:当我执行console.log(m)时,浏览器的控制台会显示我的所有视图数据。我只是不确定如何将所有数据传递给控制器​​

注意2:如果已经有一个stackoverflow上的解决方案,请随时链接到它。出于某种原因,我无法找到它。*

2 个答案:

答案 0 :(得分:0)

由于参数的数据类型是对象,因此应将其作为JSON格式传递给控制器​​。你的ajax选项应该是这样的

$.ajax({
    url: '@Url.Action("_View1")',
    contentType: "application/json", //tell ajax the data you send is JSON format
    data: JSON.stringify(m),
    success: function (result) {
        $("#View1").html(result);
    },
    error: function (e) {
        $("#View1").html("<div class='alert alert-danger' role='alert'>Error: Getting View.</div>");
    }
});

希望有所帮助

答案 1 :(得分:0)

var m = $('#Form').serialize();   
 $.post( "@Url.Action("_View1")", m)
            .done(function( data ) {
                console.log('done default');
                $("#View1").html(data);
            })
            .always(function() {
                console.log('Done')
                    });

我遇到的问题是我的视图模型通过隐藏输入对方法进行了两次绑定。这导致了序列化问题。 但序列化表单并将其作为模型对象传递回控制器工作。