发送到控制器后 ViewModel 中的列表丢失

Lists in ViewModel lost after send to controller

我在详细信息屏幕中有一个视图模型。它可以很好地显示所有信息,但是当我将 vm 发送到打印函数时,该函数只执行 return 部分视图,我丢失了 phone 号码和电子邮件的自定义列表。它们在 Print 函数中显示为空列表。知道为什么吗?

我的视图模型

             public List<PhoneDetails> Phones {get; set; }
             public List<EmailDetails> Email { get; set; }

我的打印视图

   @if (Model.Phones.Count > 0)
        {
            foreach (var phone in Model.Phones)
            {
             <p>
                phone.PhoneType Phone: <span class="policy-bold">phone.PhoneNumber</span>
            </p>
            }
        }
        else
        {
            <p>Phone Number: <span class="policy-bold">N/A</span></p>
        }
    </div>

我的打印功能

  public virtual ActionResult Print(PolicyDetailViewModel viewModel)
    {

        return PartialView("Print", viewModel);
    }

出现问题的重定向方法是:

<li role="presentation" class="pull-right"><a href="@Url.Action("Print", "ControllerName", Model)" target="_blank">Print / Full Detail View</a></li>

将列表传递给控制器​​有两种解决方案:
1) 使用表单标签:

@using(Html.BeginForm( // your paramas ))
{
    @if (Model.Phones.Count > 0)
        {
            foreach (var phone in Model.Phones)
            {
             <p>
                phone.PhoneType Phone: <span class="policy-bold">phone.PhoneNumber</span>
            </p>
            }
        }
        else
        {
            <p>Phone Number: <span class="policy-bold">N/A</span></p>
        }

}

2) 使用 ajax :
这只是一个例子:

var premisesViewModel = $('form').serializeObject();
$.ajax({
        url: form.attr('action'),
        type: 'POST',
        dataType: "json",
        contentType: 'application/json',
        data: JSON.stringify(premisesViewModel),
        success: function (data) {
            alert('done');
        }
    });