代码之家  ›  专栏  ›  技术社区  ›  dev5000

在通过JSON发送ViewModel之前,用当前表单数据填充ViewModel

  •  0
  • dev5000  · 技术社区  · 9 年前

    我正在创建一个ASP。NET MVC 5 SQL Server(实体框架,数据库优先)应用程序,其中有一个订单记录和一组附加到它的行项目记录。我正在使用视图模型显示数据。用户可以通过“添加”按钮将新的行项目记录添加到视图模型中,但在用户单击“保存”按钮之前,行项目不会提交到数据库中。(我之前写过关于另一个问题的申请: ASP.NET MVC - passing modified viewmodel from AJAX to view )

    我的“添加”按钮工作正常……除了一个非常重要的用例。如果用户更改了网页中的某些数据,然后按下“添加”按钮,则在 @Html.Raw(Json.Encode(Model)) 行被称为:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <script>
        $(document).ready(function () {
            $("#mybutton").click(function () {
                $.ajax({
                    url: "../AddNewLineItem/",
                    cache: false,
                    type: "POST",
                    data: {
                        'viewModel': @Html.Raw(Json.Encode(Model)),
                    },
                    success: function (data) {
                        $('#divPartial').append(data);
                    },
                    error: function (reponse) {
                        alert("Error: " + reponse);
                    }
                });
            });
        });
    </script>
    

    显然,之所以会出现这种情况,是因为该模型尚未使用网页中的最新数据进行更新。然而,如何在通过JSON发送模型之前强制更新模型?(或者,是否有某种方法使视图模型始终与用户在表单中键入的内容保持同步?)

    1 回复  |  直到 5 年前
        1
  •  1
  •   Dave Thieben    9 年前

    这个 Model 对象是客户端上不存在的服务器端实体。相反,您需要发送客户端数据。尝试使用jQuery的 serialize 方法这将获取表单中的所有元素,并将其转换为可通过AJAX方法发送的对象:

    data: {
        'viewModel': $("form").serialize(),
        },