从PartialView MVC4获取数据

本文关键字:数据 获取 MVC4 PartialView | 更新日期: 2023-09-27 17:50:21

我正在与(ASP)合作。Net MVC4),我被困在如何从部分视图获取信息。我的意思是我有一个viewmodel

public class ShowHomeViewModel
{
    public int ID_ClientTypeID { get; set; }
    public string ReservationDate { get; set; }
    public short ClientNum { get; set; }
            public string ClientPhone { get; set; }
    public List<HomeViewModel> ReservedHuts { get; set; }
}

我有一个局部视图,我显示所有de数据从HomeViewModel,它显示的伟大,问题是,当我试图从视图中恢复ReservedHuts列表:

@model HutReservation.ViewModel.ShowHomeViewModel
    <table>
        <tr>
            @{Html.RenderPartial("_Reservations", Model.ReservedHuts);}
        </tr>
    </table>

在我的视图中,我显示列表并更改一些数据,但是当我单击按钮并转到下面的新方法时,结果是ReservedHuts (HomeViewModel的列表)为空

[HttpPost] //cambiar la pagina para el partial view
    public ActionResult New(ShowHomeViewModel vm) // <- this vm is null
    {
        foreach (HomeViewModel hvm in vm.ReservedHuts)
        {
        }
        return View("ConfirmNew", vm);
    }

我真的被卡在这里了,提前谢谢你的帮助

从PartialView MVC4获取数据

这里的问题是您的表单数据不能绑定到ShowHomeViewModel。这是因为当你渲染你的局部时,Model的上下文发生了变化(模型上下文从ShowHomeViewModel变成了HomeViewModel)。默认情况下,MVC使用约定来绑定属性(如果您愿意,您可以创建自己的模型绑定器,它使用您想要绑定的任何方法)。默认情况下,当你将EditorFor作为模型的属性时,MVC将为窗体字段命名,以便它可以被绑定到创建它的模型上下文。

所以如果你跳过部分,你可以在父视图中运行foreach,你可能仍然可以绑定到ShowHomeViewModel因为它会像这样命名表单字段

<input name="ReservedHuts_HutId">

但是,如果您使用部分并更改模型上下文,它将呈现如下相同的输入:

<input name="HutId">

所以,MVC不能(默认情况下)绑定HutId的值到ShowHomeViewModel,因为没有属性称为HutId(但有HutId属性在HomeViewModel,所以它将绑定成功!)