0

複数の div セクションを含むビューがあり、それぞれに Html.Partial() が含まれています。ビュー モデルをこのビューに渡し、ユーザーが各セクションを進むにつれてビュー モデルを更新しようとしています。ビュー モデルが (#formid).serialize() を使用するフォームにある場合、ビュー モデルを簡単にシリアル化できる方法を発見しました。

しかし、私が抱えている問題は、フォームに含まれていないいくつかのセクションをシリアライズしたいということです。フォームを使用せずにビュー モデルをシリアル化する方法はありますか? 私の目標は、ajax を使用してページのビュー モデルを更新することです。

私のビューモデル:

ユーザー位置 VM

public class UserPositionVM
{
    public virtual Users User { get; set; }
    public virtual Positions Position { get; set; }
    public int steplevel;

}

MyView.cshtml

@model ViewModels.UserPositionVM

<div class="tab-pane" id="first">
    <form id="accountForm" method="post" action="#" class="form-horizontal">
        <div class="col-12" id="userlookup">
            @Html.Partial("UserLookup")
        </div>
    </form>
</div>

<div class="tab-pane fade" id="second">
    <form id="profileForm" method="post" action="#" class="form-horizontal">
        <div class="col-12" id="userinfo">
            @Html.Partial("UserInfo", Model)
        </div>
    </form>
</div>

<a href="javascript: void(0);" class="btn btn-secondary" onclick="processnext()">Next</a></li>

<script type="text/javascript">
    var page = "@Model.steplevel";
    function processnext() {
        if (page == 0) {
            var usernum = document.getElementById('User_Number').value;
            $.ajax({
                url: '@Url.Action("UserInfo", "Positions")',
                data: { un: usernum },
                type: "POST",
                success: function (data) {
                    if (data) {
                        $("#userinfo").html(data);
                    }
                }
            });
        }
        else if (page == 1) {
            var formdata = $('#profileForm').serialize();
             $.ajax({
                 url: '@Url.Action("EditUserInfo", "Positions")',
                 data: formdata,
                 type: "POST",
                 success: function (data) {
                    if (data) {
                        $("#userinfo").html(data);
                    }
                 }
             });
        }
    }
</script>

私が抱えている問題は、最初の機能にあります。これを変更したい:

var usernum = document.getElementById('User_Number').value;
$.ajax({
    data: { un: usernum }

このようなものに:

var viewmodel = myviewmodel.serialize()
$.ajax({
    data: viewmodel

モデルをフォームに入れずにこれを行うにはどうすればよいですか? スタック オーバーフローで私が見たのは、フォームをシリアル化する方法に関する投稿だけです。

4

1 に答える 1

0

このメソッドの例を試してください:

var yourModel = '@Newtonsoft.Json.JsonConvert.SerializeObject(Model)';
console.log(yourModel);
于 2021-02-02T17:37:56.403 に答える